Find this useful? Enter your email to receive occasional updates for securing PHP code.
Signing you up...
Thank you for signing up!
PHP Decode
<?php use Carbon\Carbon; use Illuminate\Support\Arr; use Webkul\Checkout\Models\Cart; use..
Decoded Output download
<?php
use Carbon\Carbon;
use Illuminate\Support\Arr;
use Webkul\Checkout\Models\Cart;
use Webkul\Checkout\Models\CartAddress;
use Webkul\Checkout\Models\CartItem;
use Webkul\Checkout\Models\CartPayment;
use Webkul\Checkout\Models\CartShippingRate;
use Webkul\Customer\Models\Customer;
use Webkul\Customer\Models\CustomerAddress;
use Webkul\Faker\Helpers\Product as ProductFaker;
use Webkul\Sales\Models\Invoice;
use Webkul\Sales\Models\InvoiceItem;
use Webkul\Sales\Models\Order;
use Webkul\Sales\Models\OrderAddress;
use Webkul\Sales\Models\OrderItem;
use Webkul\Sales\Models\OrderPayment;
use Webkul\Sales\Models\OrderTransaction;
use function Pest\Laravel\get;
it('should return the sales index page', function () {
// Act and Assert.
$this->loginAsAdmin();
get(route('admin.reporting.sales.index'))
->assertOk()
->assertSeeText(trans('admin::app.reporting.sales.index.title'))
->assertSeeText(trans('admin::app.reporting.sales.index.refunds'))
->assertSeeText(trans('admin::app.reporting.sales.index.total-sales'));
});
it('should returns the sales stats', function () {
// Arrange.
$product = (new ProductFaker([
'attributes' => [
5 => 'new',
],
'attribute_value' => [
'new' => [
'boolean_value' => true,
],
],
]))
->getSimpleProductFactory()
->create();
$customer = Customer::factory()->create();
$cart = Cart::factory()->create([
'customer_id' => $customer->id,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'customer_email' => $customer->email,
'is_guest' => 0,
]);
$additional = [
'product_id' => $product->id,
'rating' => '0',
'is_buy_now' => '0',
'quantity' => '1',
];
$cartItem = CartItem::factory()->create([
'cart_id' => $cart->id,
'product_id' => $product->id,
'sku' => $product->sku,
'quantity' => $additional['quantity'],
'name' => $product->name,
'price' => $convertedPrice = core()->convertPrice($price = $product->price),
'base_price' => $price,
'total' => $convertedPrice * $additional['quantity'],
'base_total' => $price * $additional['quantity'],
'weight' => $product->weight ?? 0,
'total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'base_total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'type' => $product->type,
'additional' => $additional,
]);
$customerAddress = CustomerAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CustomerAddress::ADDRESS_TYPE,
]);
$cartBillingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_BILLING,
]);
$cartShippingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_SHIPPING,
]);
$cartPayment = CartPayment::factory()->create([
'cart_id' => $cart->id,
'method' => $paymentMethod = 'cashondelivery',
'method_title' => core()->getConfigData('sales.payment_methods.'.$paymentMethod.'.title'),
]);
$cartShippingRate = CartShippingRate::factory()->create([
'carrier' => 'free',
'carrier_title' => 'Free shipping',
'method' => 'free_free',
'method_title' => 'Free Shipping',
'method_description' => 'Free Shipping',
'cart_address_id' => $cartShippingAddress->id,
]);
$order = Order::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'customer_email' => $customer->email,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'status' => 'processing',
'sub_total_invoiced' => $product->price,
'base_sub_total_invoiced' => $product->price,
]);
$orderItem = OrderItem::factory()->create([
'product_id' => $product->id,
'order_id' => $order->id,
'sku' => $product->sku,
'type' => $product->type,
'name' => $product->name,
'qty_invoiced' => 1,
'base_total_invoiced' => $product->price,
]);
$orderBillingAddress = OrderAddress::factory()->create([
...Arr::except($cartBillingAddress->toArray(), ['id', 'created_at', 'updated_at']),
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_BILLING,
'order_id' => $order->id,
]);
$orderShippingAddress = OrderAddress::factory()->create([
...Arr::except($cartShippingAddress->toArray(), ['id', 'created_at', 'updated_at']),
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_SHIPPING,
'order_id' => $order->id,
]);
$orderPayment = OrderPayment::factory()->create([
'order_id' => $order->id,
'method' => 'cashondelivery',
]);
$invoice = Invoice::factory()->create([
'order_id' => $order->id,
'state' => 'paid',
'total_qty' => 1,
'base_currency_code' => $order->base_currency_code,
'channel_currency_code' => $order->channel_currency_code,
'order_currency_code' => $order->order_currency_code,
'email_sent' => 1,
'discount_amount' => 0,
'base_discount_amount' => 0,
'sub_total' => $orderItem->base_price,
'base_sub_total' => $orderItem->base_price,
'grand_total' => $orderItem->price,
'base_grand_total' => $orderItem->price,
]);
$invoiceItem = InvoiceItem::factory()->create([
'invoice_id' => $invoice->id,
'order_item_id' => $orderItem->id,
'name' => $orderItem->name,
'sku' => $orderItem->sku,
'qty' => 1,
'price' => $orderItem->price,
'base_price' => $orderItem->base_price,
'total' => $orderItem->price,
'base_total' => $orderItem->base_price,
'tax_amount' => (($orderItem->tax_amount / $orderItem->qty_ordered)),
'base_tax_amount' => (($orderItem->base_tax_amount / $orderItem->qty_ordered)),
'discount_amount' => (($orderItem->discount_amount / $orderItem->qty_ordered)),
'base_discount_amount' => (($orderItem->base_discount_amount / $orderItem->qty_ordered)),
'product_id' => $orderItem->product_id,
'product_type' => $orderItem->product_type,
'additional' => $orderItem->additional,
]);
$orderTransaction = OrderTransaction::factory()->create([
'transaction_id' => md5(uniqid()),
'type' => 'cashondelivery',
'payment_method' => 'cashondelivery',
'status' => 'paid',
'status' => $invoice->state,
'order_id' => $invoice->order->id,
'invoice_id' => $invoice->id,
'amount' => $invoice->grand_total,
]);
// Act and Assert.
$this->loginAsAdmin();
$response = get(route('admin.reporting.sales.stats', [
'type' => 'total-sales',
]))
->assertOk()
->assertJsonPath('statistics.sales.progress', 100)
->assertJsonPath('statistics.over_time.current.30.count', 1)
->assertJsonPath('statistics.sales.formatted_total', core()->formatBasePrice($order->grand_total));
$this->assertPrice($order->grand_total, $response->json('statistics.sales.current'));
$cart->refresh();
$cartItem->refresh();
$cartBillingAddress->refresh();
$cartShippingAddress->refresh();
$orderBillingAddress->refresh();
$orderShippingAddress->refresh();
$order->refresh();
$orderItem->refresh();
$invoiceItem->refresh();
$orderTransaction->refresh();
$this->assertModelWise([
Cart::class => [
$this->prepareCart($cart),
],
CartItem::class => [
$this->prepareCartItem($cartItem),
],
CartPayment::class => [
$this->prepareCartPayment($cartPayment),
],
CartAddress::class => [
$this->prepareAddress($cartBillingAddress),
],
CartAddress::class => [
$this->prepareAddress($cartShippingAddress),
],
CartShippingRate::class => [
$this->prepareCartShippingRate($cartShippingRate),
],
CustomerAddress::class => [
$this->prepareAddress($customerAddress),
],
Order::class => [
$this->prepareOrder($order),
],
OrderItem::class => [
$this->prepareOrderItem($orderItem),
],
OrderAddress::class => [
$this->prepareAddress($orderBillingAddress),
$this->prepareAddress($orderShippingAddress),
],
OrderPayment::class => [
$this->prepareOrderPayment($orderPayment),
],
Invoice::class => [
$this->prepareInvoice($order, $orderItem),
],
InvoiceItem::class => [
$this->prepareInvoiceItem($invoiceItem),
],
]);
});
it('should returns the purchase funnel stats', function () {
// Arrange.
$product = (new ProductFaker([
'attributes' => [
5 => 'new',
],
'attribute_value' => [
'new' => [
'boolean_value' => true,
],
],
]))
->getSimpleProductFactory()
->create();
$customer = Customer::factory()->create();
visitor()->visit($customer);
$customer = Customer::factory()->create();
$cart = Cart::factory()->create([
'customer_id' => $customer->id,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'customer_email' => $customer->email,
'is_guest' => 0,
]);
$additional = [
'product_id' => $product->id,
'rating' => '0',
'is_buy_now' => '0',
'quantity' => '1',
];
$cartItem = CartItem::factory()->create([
'cart_id' => $cart->id,
'product_id' => $product->id,
'sku' => $product->sku,
'quantity' => $additional['quantity'],
'name' => $product->name,
'price' => $convertedPrice = core()->convertPrice($price = $product->price),
'base_price' => $price,
'total' => $convertedPrice * $additional['quantity'],
'base_total' => $price * $additional['quantity'],
'weight' => $product->weight ?? 0,
'total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'base_total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'type' => $product->type,
'additional' => $additional,
]);
$customerAddress = CustomerAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CustomerAddress::ADDRESS_TYPE,
]);
$cartBillingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_BILLING,
]);
$cartShippingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_SHIPPING,
]);
$cartPayment = CartPayment::factory()->create([
'cart_id' => $cart->id,
'method' => $paymentMethod = 'cashondelivery',
'method_title' => core()->getConfigData('sales.payment_methods.'.$paymentMethod.'.title'),
]);
$cartShippingRate = CartShippingRate::factory()->create([
'carrier' => 'free',
'carrier_title' => 'Free shipping',
'method' => 'free_free',
'method_title' => 'Free Shipping',
'method_description' => 'Free Shipping',
'cart_address_id' => $cartShippingAddress->id,
]);
$order = Order::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'customer_email' => $customer->email,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'status' => 'processing',
'sub_total_invoiced' => $product->price,
'base_sub_total_invoiced' => $product->price,
]);
$orderItem = OrderItem::factory()->create([
'product_id' => $product->id,
'order_id' => $order->id,
'sku' => $product->sku,
'type' => $product->type,
'name' => $product->name,
'qty_invoiced' => 1,
'base_total_invoiced' => $product->price,
]);
$orderBillingAddress = OrderAddress::factory()->create([
...Arr::except($cartBillingAddress->toArray(), ['id', 'created_at', 'updated_at']),
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_BILLING,
'order_id' => $order->id,
]);
$orderShippingAddress = OrderAddress::factory()->create([
...Arr::except($cartShippingAddress->toArray(), ['id', 'created_at', 'updated_at']),
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_SHIPPING,
'order_id' => $order->id,
]);
$orderPayment = OrderPayment::factory()->create([
'order_id' => $order->id,
'method' => 'cashondelivery',
]);
$invoice = Invoice::factory()->create([
'order_id' => $order->id,
'state' => 'paid',
'total_qty' => 1,
'base_currency_code' => $order->base_currency_code,
'channel_currency_code' => $order->channel_currency_code,
'order_currency_code' => $order->order_currency_code,
'email_sent' => 1,
'discount_amount' => 0,
'base_discount_amount' => 0,
'sub_total' => $orderItem->base_price,
'base_sub_total' => $orderItem->base_price,
'grand_total' => $orderItem->price,
'base_grand_total' => $orderItem->price,
]);
$invoiceItem = InvoiceItem::factory()->create([
'invoice_id' => $invoice->id,
'order_item_id' => $orderItem->id,
'name' => $orderItem->name,
'sku' => $orderItem->sku,
'qty' => 1,
'price' => $orderItem->price,
'base_price' => $orderItem->base_price,
'total' => $orderItem->price,
'base_total' => $orderItem->base_price,
'tax_amount' => (($orderItem->tax_amount / $orderItem->qty_ordered)),
'base_tax_amount' => (($orderItem->base_tax_amount / $orderItem->qty_ordered)),
'discount_amount' => (($orderItem->discount_amount / $orderItem->qty_ordered)),
'base_discount_amount' => (($orderItem->base_discount_amount / $orderItem->qty_ordered)),
'product_id' => $orderItem->product_id,
'product_type' => $orderItem->product_type,
'additional' => $orderItem->additional,
]);
$orderTransaction = OrderTransaction::factory()->create([
'transaction_id' => md5(uniqid()),
'type' => 'cashondelivery',
'payment_method' => 'cashondelivery',
'status' => 'paid',
'status' => $invoice->state,
'order_id' => $invoice->order->id,
'invoice_id' => $invoice->id,
'amount' => $invoice->grand_total,
]);
// Act and Assert.
$this->loginAsAdmin();
get(route('admin.reporting.sales.stats', [
'type' => 'purchase-funnel',
]))
->assertOk()
->assertJsonPath('statistics.visitors.total', 1)
->assertJsonPath('statistics.carts.total', 1)
->assertJsonPath('statistics.orders.total', 1);
$cart->refresh();
$cartItem->refresh();
$cartBillingAddress->refresh();
$cartShippingAddress->refresh();
$orderBillingAddress->refresh();
$orderShippingAddress->refresh();
$order->refresh();
$orderItem->refresh();
$invoiceItem->refresh();
$orderTransaction->refresh();
$this->assertModelWise([
Cart::class => [
$this->prepareCart($cart),
],
CartItem::class => [
$this->prepareCartItem($cartItem),
],
CartPayment::class => [
$this->prepareCartPayment($cartPayment),
],
CartAddress::class => [
$this->prepareAddress($cartBillingAddress),
],
CartAddress::class => [
$this->prepareAddress($cartShippingAddress),
],
CartShippingRate::class => [
$this->prepareCartShippingRate($cartShippingRate),
],
CustomerAddress::class => [
$this->prepareAddress($customerAddress),
],
Order::class => [
$this->prepareOrder($order),
],
OrderItem::class => [
$this->prepareOrderItem($orderItem),
],
OrderAddress::class => [
$this->prepareAddress($orderBillingAddress),
$this->prepareAddress($orderShippingAddress),
],
OrderPayment::class => [
$this->prepareOrderPayment($orderPayment),
],
Invoice::class => [
$this->prepareInvoice($order, $orderItem),
],
InvoiceItem::class => [
$this->prepareInvoiceItem($invoiceItem),
],
]);
});
it('should returns the abandoned carts stats', function () {
// Arrange.
$product = (new ProductFaker([
'attributes' => [
5 => 'new',
],
'attribute_value' => [
'new' => [
'boolean_value' => true,
],
],
]))
->getSimpleProductFactory()
->create();
$additional = [
'product_id' => $product->id,
'rating' => '0',
'is_buy_now' => '0',
'quantity' => '1',
];
$customer = Customer::factory()->create();
$cart = Cart::factory()->create([
'customer_id' => $customer->id,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'customer_email' => $customer->email,
'created_at' => Carbon::now()->subMonth()->toDateString(),
'is_guest' => 0,
]);
CartItem::factory()->create([
'cart_id' => $cart->id,
'product_id' => $product->id,
'sku' => $product->sku,
'quantity' => $additional['quantity'],
'name' => $product->name,
'price' => $convertedPrice = core()->convertPrice($price = $product->price),
'base_price' => $price,
'total' => $convertedPrice * $additional['quantity'],
'base_total' => $price * $additional['quantity'],
'weight' => $product->weight ?? 0,
'total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'base_total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'type' => $product->type,
'additional' => $additional,
]);
// Act and Assert.
$this->loginAsAdmin();
get(route('admin.reporting.sales.stats', [
'start' => Carbon::now()->copy()->subMonth()->toDateString(),
'type' => 'abandoned-carts',
'end' => Carbon::now()->addMonths(5)->toDateString(),
]))
->assertOk()
->assertJsonPath('statistics.carts.current', 1)
->assertJsonPath('statistics.rate.current', 100)
->assertJsonPath('statistics.rate.progress', 100)
->assertJsonPath('statistics.products.0.id', $product->id)
->assertJsonPath('statistics.products.0.name', $product->name)
->assertJsonPath('statistics.products.0.count', 1)
->assertJsonPath('statistics.products.0.progress', 100);
});
it('should returns the total orders stats', function () {
// Arrange.
$product = (new ProductFaker([
'attributes' => [
5 => 'new',
],
'attribute_value' => [
'new' => [
'boolean_value' => true,
],
],
]))
->getSimpleProductFactory()
->create();
$customer = Customer::factory()->create();
$cart = Cart::factory()->create([
'customer_id' => $customer->id,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'customer_email' => $customer->email,
'is_guest' => 0,
]);
$additional = [
'product_id' => $product->id,
'rating' => '0',
'is_buy_now' => '0',
'quantity' => '1',
];
$cartItem = CartItem::factory()->create([
'cart_id' => $cart->id,
'product_id' => $product->id,
'sku' => $product->sku,
'quantity' => $additional['quantity'],
'name' => $product->name,
'price' => $convertedPrice = core()->convertPrice($price = $product->price),
'base_price' => $price,
'total' => $convertedPrice * $additional['quantity'],
'base_total' => $price * $additional['quantity'],
'weight' => $product->weight ?? 0,
'total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'base_total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'type' => $product->type,
'additional' => $additional,
]);
$customerAddress = CustomerAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CustomerAddress::ADDRESS_TYPE,
]);
$cartBillingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_BILLING,
]);
$cartShippingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_SHIPPING,
]);
$cartPayment = CartPayment::factory()->create([
'cart_id' => $cart->id,
'method' => $paymentMethod = 'cashondelivery',
'method_title' => core()->getConfigData('sales.payment_methods.'.$paymentMethod.'.title'),
]);
$cartShippingRate = CartShippingRate::factory()->create([
'carrier' => 'free',
'carrier_title' => 'Free shipping',
'method' => 'free_free',
'method_title' => 'Free Shipping',
'method_description' => 'Free Shipping',
'cart_address_id' => $cartShippingAddress->id,
]);
$order = Order::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'customer_email' => $customer->email,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'status' => 'processing',
'sub_total_invoiced' => $product->price,
'base_sub_total_invoiced' => $product->price,
]);
$orderItem = OrderItem::factory()->create([
'product_id' => $product->id,
'order_id' => $order->id,
'sku' => $product->sku,
'type' => $product->type,
'name' => $product->name,
'qty_invoiced' => 1,
'base_total_invoiced' => $product->price,
]);
$orderBillingAddress = OrderAddress::factory()->create([
...Arr::except($cartBillingAddress->toArray(), ['id', 'created_at', 'updated_at']),
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_BILLING,
'order_id' => $order->id,
]);
$orderShippingAddress = OrderAddress::factory()->create([
...Arr::except($cartShippingAddress->toArray(), ['id', 'created_at', 'updated_at']),
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_SHIPPING,
'order_id' => $order->id,
]);
$orderPayment = OrderPayment::factory()->create([
'order_id' => $order->id,
'method' => 'cashondelivery',
]);
$invoice = Invoice::factory()->create([
'order_id' => $order->id,
'state' => 'paid',
'total_qty' => 1,
'base_currency_code' => $order->base_currency_code,
'channel_currency_code' => $order->channel_currency_code,
'order_currency_code' => $order->order_currency_code,
'email_sent' => 1,
'discount_amount' => 0,
'base_discount_amount' => 0,
'sub_total' => $orderItem->base_price,
'base_sub_total' => $orderItem->base_price,
'grand_total' => $orderItem->price,
'base_grand_total' => $orderItem->price,
]);
$invoiceItem = InvoiceItem::factory()->create([
'invoice_id' => $invoice->id,
'order_item_id' => $orderItem->id,
'name' => $orderItem->name,
'sku' => $orderItem->sku,
'qty' => 1,
'price' => $orderItem->price,
'base_price' => $orderItem->base_price,
'total' => $orderItem->price,
'base_total' => $orderItem->base_price,
'tax_amount' => (($orderItem->tax_amount / $orderItem->qty_ordered)),
'base_tax_amount' => (($orderItem->base_tax_amount / $orderItem->qty_ordered)),
'discount_amount' => (($orderItem->discount_amount / $orderItem->qty_ordered)),
'base_discount_amount' => (($orderItem->base_discount_amount / $orderItem->qty_ordered)),
'product_id' => $orderItem->product_id,
'product_type' => $orderItem->product_type,
'additional' => $orderItem->additional,
]);
$orderTransaction = OrderTransaction::factory()->create([
'transaction_id' => md5(uniqid()),
'type' => 'cashondelivery',
'payment_method' => 'cashondelivery',
'status' => 'paid',
'status' => $invoice->state,
'order_id' => $invoice->order->id,
'invoice_id' => $invoice->id,
'amount' => $invoice->grand_total,
]);
// Act and Assert.
$this->loginAsAdmin();
get(route('admin.reporting.sales.stats', [
'start' => Carbon::now()->copy()->subMonth(),
'type' => 'total-orders',
'end' => Carbon::now()->addMonths(5),
]))
->assertOk()
->assertJsonPath('statistics.orders.current', 1)
->assertJsonPath('statistics.orders.progress', 100);
$cart->refresh();
$cartItem->refresh();
$cartBillingAddress->refresh();
$cartShippingAddress->refresh();
$orderBillingAddress->refresh();
$orderShippingAddress->refresh();
$order->refresh();
$orderItem->refresh();
$invoiceItem->refresh();
$orderTransaction->refresh();
$this->assertModelWise([
Cart::class => [
$this->prepareCart($cart),
],
CartItem::class => [
$this->prepareCartItem($cartItem),
],
CartPayment::class => [
$this->prepareCartPayment($cartPayment),
],
CartAddress::class => [
$this->prepareAddress($cartBillingAddress),
],
CartAddress::class => [
$this->prepareAddress($cartShippingAddress),
],
CartShippingRate::class => [
$this->prepareCartShippingRate($cartShippingRate),
],
CustomerAddress::class => [
$this->prepareAddress($customerAddress),
],
Order::class => [
$this->prepareOrder($order),
],
OrderItem::class => [
$this->prepareOrderItem($orderItem),
],
OrderAddress::class => [
$this->prepareAddress($orderBillingAddress),
$this->prepareAddress($orderShippingAddress),
],
OrderPayment::class => [
$this->prepareOrderPayment($orderPayment),
],
Invoice::class => [
$this->prepareInvoice($order, $orderItem),
],
InvoiceItem::class => [
$this->prepareInvoiceItem($invoiceItem),
],
]);
});
it('should returns the average sale stats', function () {
// Arrange.
$product = (new ProductFaker([
'attributes' => [
5 => 'new',
],
'attribute_value' => [
'new' => [
'boolean_value' => true,
],
],
]))
->getSimpleProductFactory()
->create();
$customer = Customer::factory()->create();
$cart = Cart::factory()->create([
'customer_id' => $customer->id,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'customer_email' => $customer->email,
'is_guest' => 0,
]);
$additional = [
'product_id' => $product->id,
'rating' => '0',
'is_buy_now' => '0',
'quantity' => '1',
];
$cartItem = CartItem::factory()->create([
'cart_id' => $cart->id,
'product_id' => $product->id,
'sku' => $product->sku,
'quantity' => $additional['quantity'],
'name' => $product->name,
'price' => $convertedPrice = core()->convertPrice($price = $product->price),
'base_price' => $price,
'total' => $convertedPrice * $additional['quantity'],
'base_total' => $price * $additional['quantity'],
'weight' => $product->weight ?? 0,
'total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'base_total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'type' => $product->type,
'additional' => $additional,
]);
$customerAddress = CustomerAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CustomerAddress::ADDRESS_TYPE,
]);
$cartBillingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_BILLING,
]);
$cartShippingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_SHIPPING,
]);
$cartPayment = CartPayment::factory()->create([
'cart_id' => $cart->id,
'method' => $paymentMethod = 'cashondelivery',
'method_title' => core()->getConfigData('sales.payment_methods.'.$paymentMethod.'.title'),
]);
$cartShippingRate = CartShippingRate::factory()->create([
'carrier' => 'free',
'carrier_title' => 'Free shipping',
'method' => 'free_free',
'method_title' => 'Free Shipping',
'method_description' => 'Free Shipping',
'cart_address_id' => $cartShippingAddress->id,
]);
$order = Order::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'customer_email' => $customer->email,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'status' => 'processing',
'sub_total_invoiced' => $product->price,
'base_sub_total_invoiced' => $product->price,
]);
$orderItem = OrderItem::factory()->create([
'product_id' => $product->id,
'order_id' => $order->id,
'sku' => $product->sku,
'type' => $product->type,
'name' => $product->name,
'qty_invoiced' => 1,
'base_total_invoiced' => $product->price,
]);
$orderBillingAddress = OrderAddress::factory()->create([
...Arr::except($cartBillingAddress->toArray(), ['id', 'created_at', 'updated_at']),
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_BILLING,
'order_id' => $order->id,
]);
$orderShippingAddress = OrderAddress::factory()->create([
...Arr::except($cartShippingAddress->toArray(), ['id', 'created_at', 'updated_at']),
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_SHIPPING,
'order_id' => $order->id,
]);
$orderPayment = OrderPayment::factory()->create([
'order_id' => $order->id,
'method' => 'cashondelivery',
]);
$invoice = Invoice::factory()->create([
'order_id' => $order->id,
'state' => 'paid',
'total_qty' => 1,
'base_currency_code' => $order->base_currency_code,
'channel_currency_code' => $order->channel_currency_code,
'order_currency_code' => $order->order_currency_code,
'email_sent' => 1,
'discount_amount' => 0,
'base_discount_amount' => 0,
'sub_total' => $orderItem->base_price,
'base_sub_total' => $orderItem->base_price,
'grand_total' => $orderItem->price,
'base_grand_total' => $orderItem->price,
]);
$invoiceItem = InvoiceItem::factory()->create([
'invoice_id' => $invoice->id,
'order_item_id' => $orderItem->id,
'name' => $orderItem->name,
'sku' => $orderItem->sku,
'qty' => 1,
'price' => $orderItem->price,
'base_price' => $orderItem->base_price,
'total' => $orderItem->price,
'base_total' => $orderItem->base_price,
'tax_amount' => (($orderItem->tax_amount / $orderItem->qty_ordered)),
'base_tax_amount' => (($orderItem->base_tax_amount / $orderItem->qty_ordered)),
'discount_amount' => (($orderItem->discount_amount / $orderItem->qty_ordered)),
'base_discount_amount' => (($orderItem->base_discount_amount / $orderItem->qty_ordered)),
'product_id' => $orderItem->product_id,
'product_type' => $orderItem->product_type,
'additional' => $orderItem->additional,
]);
$orderTransaction = OrderTransaction::factory()->create([
'transaction_id' => md5(uniqid()),
'type' => 'cashondelivery',
'payment_method' => 'cashondelivery',
'status' => 'paid',
'status' => $invoice->state,
'order_id' => $invoice->order->id,
'invoice_id' => $invoice->id,
'amount' => $invoice->grand_total,
]);
// Act and Assert.
$this->loginAsAdmin();
$response = get(route('admin.reporting.sales.stats', [
'start' => Carbon::now()->copy()->subMonth(),
'type' => 'average-sales',
'end' => Carbon::now()->addMonths(5),
]))
->assertOk()
->assertJsonPath('statistics.sales.progress', 100)
->assertJsonPath('statistics.sales.formatted_total', core()->formatBasePrice($order->grand_total))
->assertJsonPath('statistics.over_time.current.30.count', 1);
$this->assertPrice($order->grand_total, $response->json('statistics.over_time.current.30.total'));
$cart->refresh();
$cartItem->refresh();
$cartBillingAddress->refresh();
$cartShippingAddress->refresh();
$orderBillingAddress->refresh();
$orderShippingAddress->refresh();
$order->refresh();
$orderItem->refresh();
$invoiceItem->refresh();
$orderTransaction->refresh();
$this->assertModelWise([
Cart::class => [
$this->prepareCart($cart),
],
CartItem::class => [
$this->prepareCartItem($cartItem),
],
CartPayment::class => [
$this->prepareCartPayment($cartPayment),
],
CartAddress::class => [
$this->prepareAddress($cartBillingAddress),
],
CartAddress::class => [
$this->prepareAddress($cartShippingAddress),
],
CartShippingRate::class => [
$this->prepareCartShippingRate($cartShippingRate),
],
CustomerAddress::class => [
$this->prepareAddress($customerAddress),
],
Order::class => [
$this->prepareOrder($order),
],
OrderItem::class => [
$this->prepareOrderItem($orderItem),
],
OrderAddress::class => [
$this->prepareAddress($orderBillingAddress),
$this->prepareAddress($orderShippingAddress),
],
OrderPayment::class => [
$this->prepareOrderPayment($orderPayment),
],
Invoice::class => [
$this->prepareInvoice($order, $orderItem),
],
InvoiceItem::class => [
$this->prepareInvoiceItem($invoiceItem),
],
]);
});
it('should returns the shipping collected stats', function () {
// Arrange.
$product = (new ProductFaker([
'attributes' => [
5 => 'new',
],
'attribute_value' => [
'new' => [
'boolean_value' => true,
],
],
]))
->getSimpleProductFactory()
->create();
$customer = Customer::factory()->create();
$cart = Cart::factory()->create([
'customer_id' => $customer->id,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'customer_email' => $customer->email,
'is_guest' => 0,
]);
$additional = [
'product_id' => $product->id,
'rating' => '0',
'is_buy_now' => '0',
'quantity' => '1',
];
$cartItem = CartItem::factory()->create([
'cart_id' => $cart->id,
'product_id' => $product->id,
'sku' => $product->sku,
'quantity' => $additional['quantity'],
'name' => $product->name,
'price' => $convertedPrice = core()->convertPrice($price = $product->price),
'base_price' => $price,
'total' => $convertedPrice * $additional['quantity'],
'base_total' => $price * $additional['quantity'],
'weight' => $product->weight ?? 0,
'total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'base_total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'type' => $product->type,
'additional' => $additional,
]);
$customerAddress = CustomerAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CustomerAddress::ADDRESS_TYPE,
]);
$cartBillingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_BILLING,
]);
$cartShippingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_SHIPPING,
]);
$cartPayment = CartPayment::factory()->create([
'cart_id' => $cart->id,
'method' => $paymentMethod = 'cashondelivery',
'method_title' => core()->getConfigData('sales.payment_methods.'.$paymentMethod.'.title'),
]);
$cartShippingRate = CartShippingRate::factory()->create([
'carrier' => 'free',
'carrier_title' => 'Free shipping',
'method' => 'free_free',
'method_title' => 'Free Shipping',
'method_description' => 'Free Shipping',
'cart_address_id' => $cartShippingAddress->id,
]);
$order = Order::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'customer_email' => $customer->email,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'status' => 'processing',
'sub_total_invoiced' => $product->price,
'base_sub_total_invoiced' => $product->price,
]);
$orderItem = OrderItem::factory()->create([
'product_id' => $product->id,
'order_id' => $order->id,
'sku' => $product->sku,
'type' => $product->type,
'name' => $product->name,
'qty_invoiced' => 1,
'base_total_invoiced' => $product->price,
]);
$orderBillingAddress = OrderAddress::factory()->create([
...Arr::except($cartBillingAddress->toArray(), ['id', 'created_at', 'updated_at']),
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_BILLING,
'order_id' => $order->id,
]);
$orderShippingAddress = OrderAddress::factory()->create([
...Arr::except($cartShippingAddress->toArray(), ['id', 'created_at', 'updated_at']),
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_SHIPPING,
'order_id' => $order->id,
]);
$orderPayment = OrderPayment::factory()->create([
'order_id' => $order->id,
'method' => 'cashondelivery',
]);
$invoice = Invoice::factory()->create([
'order_id' => $order->id,
'state' => 'paid',
'total_qty' => 1,
'base_currency_code' => $order->base_currency_code,
'channel_currency_code' => $order->channel_currency_code,
'order_currency_code' => $order->order_currency_code,
'email_sent' => 1,
'discount_amount' => 0,
'base_discount_amount' => 0,
'sub_total' => $orderItem->base_price,
'base_sub_total' => $orderItem->base_price,
'grand_total' => $orderItem->price,
'base_grand_total' => $orderItem->price,
]);
$invoiceItem = InvoiceItem::factory()->create([
'invoice_id' => $invoice->id,
'order_item_id' => $orderItem->id,
'name' => $orderItem->name,
'sku' => $orderItem->sku,
'qty' => 1,
'price' => $orderItem->price,
'base_price' => $orderItem->base_price,
'total' => $orderItem->price,
'base_total' => $orderItem->base_price,
'tax_amount' => (($orderItem->tax_amount / $orderItem->qty_ordered)),
'base_tax_amount' => (($orderItem->base_tax_amount / $orderItem->qty_ordered)),
'discount_amount' => (($orderItem->discount_amount / $orderItem->qty_ordered)),
'base_discount_amount' => (($orderItem->base_discount_amount / $orderItem->qty_ordered)),
'product_id' => $orderItem->product_id,
'product_type' => $orderItem->product_type,
'additional' => $orderItem->additional,
]);
$orderTransaction = OrderTransaction::factory()->create([
'transaction_id' => md5(uniqid()),
'type' => 'cashondelivery',
'payment_method' => 'cashondelivery',
'status' => 'paid',
'status' => $invoice->state,
'order_id' => $invoice->order->id,
'invoice_id' => $invoice->id,
'amount' => $invoice->grand_total,
]);
// Act and Assert.
$this->loginAsAdmin();
get(route('admin.reporting.sales.stats', [
'start' => Carbon::now()->copy()->subMonth(),
'type' => 'shipping-collected',
'end' => Carbon::now()->addMonths(5),
]))
->assertOk()
->assertJsonPath('statistics.top_methods.0.title', 'Free Shipping');
$cart->refresh();
$cartItem->refresh();
$cartBillingAddress->refresh();
$cartShippingAddress->refresh();
$orderBillingAddress->refresh();
$orderShippingAddress->refresh();
$order->refresh();
$orderItem->refresh();
$invoiceItem->refresh();
$orderTransaction->refresh();
$this->assertModelWise([
Cart::class => [
$this->prepareCart($cart),
],
CartItem::class => [
$this->prepareCartItem($cartItem),
],
CartPayment::class => [
$this->prepareCartPayment($cartPayment),
],
CartAddress::class => [
$this->prepareAddress($cartBillingAddress),
],
CartAddress::class => [
$this->prepareAddress($cartShippingAddress),
],
CartShippingRate::class => [
$this->prepareCartShippingRate($cartShippingRate),
],
CustomerAddress::class => [
$this->prepareAddress($customerAddress),
],
Order::class => [
$this->prepareOrder($order),
],
OrderItem::class => [
$this->prepareOrderItem($orderItem),
],
OrderAddress::class => [
$this->prepareAddress($orderBillingAddress),
$this->prepareAddress($orderShippingAddress),
],
OrderPayment::class => [
$this->prepareOrderPayment($orderPayment),
],
Invoice::class => [
$this->prepareInvoice($order, $orderItem),
],
InvoiceItem::class => [
$this->prepareInvoiceItem($invoiceItem),
],
]);
});
it('should returns the tax collected stats', function () {
// Arrange.
$product = (new ProductFaker([
'attributes' => [
5 => 'new',
],
'attribute_value' => [
'new' => [
'boolean_value' => true,
],
],
]))
->getSimpleProductFactory()
->create();
$customer = Customer::factory()->create();
$cart = Cart::factory()->create([
'customer_id' => $customer->id,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'customer_email' => $customer->email,
'is_guest' => 0,
]);
$additional = [
'product_id' => $product->id,
'rating' => '0',
'is_buy_now' => '0',
'quantity' => '1',
];
$cartItem = CartItem::factory()->create([
'cart_id' => $cart->id,
'product_id' => $product->id,
'sku' => $product->sku,
'quantity' => $additional['quantity'],
'name' => $product->name,
'price' => $convertedPrice = core()->convertPrice($price = $product->price),
'base_price' => $price,
'total' => $convertedPrice * $additional['quantity'],
'base_total' => $price * $additional['quantity'],
'weight' => $product->weight ?? 0,
'total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'base_total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'type' => $product->type,
'additional' => $additional,
]);
$customerAddress = CustomerAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CustomerAddress::ADDRESS_TYPE,
]);
$cartBillingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_BILLING,
]);
$cartShippingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_SHIPPING,
]);
$cartPayment = CartPayment::factory()->create([
'cart_id' => $cart->id,
'method' => $paymentMethod = 'cashondelivery',
'method_title' => core()->getConfigData('sales.payment_methods.'.$paymentMethod.'.title'),
]);
$cartShippingRate = CartShippingRate::factory()->create([
'carrier' => 'free',
'carrier_title' => 'Free shipping',
'method' => 'free_free',
'method_title' => 'Free Shipping',
'method_description' => 'Free Shipping',
'cart_address_id' => $cartShippingAddress->id,
]);
$order = Order::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'customer_email' => $customer->email,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'status' => 'processing',
'sub_total_invoiced' => $product->price,
'base_sub_total_invoiced' => $product->price,
'base_tax_amount_invoiced' => $taxInvoiced = rand(20, 50),
'base_grand_total_refunded' => $grantTotalRefunded = $taxInvoiced - 10,
]);
$orderItem = OrderItem::factory()->create([
'product_id' => $product->id,
'order_id' => $order->id,
'sku' => $product->sku,
'type' => $product->type,
'name' => $product->name,
'qty_invoiced' => 1,
'base_total_invoiced' => $product->price,
]);
$orderBillingAddress = OrderAddress::factory()->create([
...Arr::except($cartBillingAddress->toArray(), ['id', 'created_at', 'updated_at']),
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_BILLING,
'order_id' => $order->id,
]);
$orderShippingAddress = OrderAddress::factory()->create([
...Arr::except($cartShippingAddress->toArray(), ['id', 'created_at', 'updated_at']),
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_SHIPPING,
'order_id' => $order->id,
]);
$orderPayment = OrderPayment::factory()->create([
'order_id' => $order->id,
'method' => 'cashondelivery',
]);
$invoice = Invoice::factory()->create([
'order_id' => $order->id,
'state' => 'paid',
'total_qty' => 1,
'base_currency_code' => $order->base_currency_code,
'channel_currency_code' => $order->channel_currency_code,
'order_currency_code' => $order->order_currency_code,
'email_sent' => 1,
'discount_amount' => 0,
'base_discount_amount' => 0,
'sub_total' => $orderItem->base_price,
'base_sub_total' => $orderItem->base_price,
'grand_total' => $orderItem->price,
'base_grand_total' => $orderItem->price,
]);
$invoiceItem = InvoiceItem::factory()->create([
'invoice_id' => $invoice->id,
'order_item_id' => $orderItem->id,
'name' => $orderItem->name,
'sku' => $orderItem->sku,
'qty' => 1,
'price' => $orderItem->price,
'base_price' => $orderItem->base_price,
'total' => $orderItem->price,
'base_total' => $orderItem->base_price,
'tax_amount' => (($orderItem->tax_amount / $orderItem->qty_ordered)),
'base_tax_amount' => (($orderItem->base_tax_amount / $orderItem->qty_ordered)),
'discount_amount' => (($orderItem->discount_amount / $orderItem->qty_ordered)),
'base_discount_amount' => (($orderItem->base_discount_amount / $orderItem->qty_ordered)),
'product_id' => $orderItem->product_id,
'product_type' => $orderItem->product_type,
'additional' => $orderItem->additional,
]);
$orderTransaction = OrderTransaction::factory()->create([
'transaction_id' => md5(uniqid()),
'type' => 'cashondelivery',
'payment_method' => 'cashondelivery',
'status' => $invoice->state,
'order_id' => $invoice->order->id,
'invoice_id' => $invoice->id,
'amount' => $invoice->grand_total,
]);
// Act and Assert.
$this->loginAsAdmin();
get(route('admin.reporting.sales.stats', [
'start' => Carbon::now()->copy()->subMonth(),
'type' => 'tax-collected',
'end' => Carbon::now()->addMonths(5),
]))
->assertOk()
->assertJsonPath('statistics.tax_collected.current', $taxInvoiced);
$cart->refresh();
$cartItem->refresh();
$cartBillingAddress->refresh();
$cartShippingAddress->refresh();
$orderBillingAddress->refresh();
$orderShippingAddress->refresh();
$order->refresh();
$orderItem->refresh();
$invoiceItem->refresh();
$orderTransaction->refresh();
$this->assertModelWise([
Cart::class => [
$this->prepareCart($cart),
],
CartItem::class => [
$this->prepareCartItem($cartItem),
],
CartPayment::class => [
$this->prepareCartPayment($cartPayment),
],
CartAddress::class => [
$this->prepareAddress($cartBillingAddress),
],
CartAddress::class => [
$this->prepareAddress($cartShippingAddress),
],
CartShippingRate::class => [
$this->prepareCartShippingRate($cartShippingRate),
],
CustomerAddress::class => [
$this->prepareAddress($customerAddress),
],
Order::class => [
$this->prepareOrder($order),
],
OrderItem::class => [
$this->prepareOrderItem($orderItem),
],
OrderAddress::class => [
$this->prepareAddress($orderBillingAddress),
$this->prepareAddress($orderShippingAddress),
],
OrderPayment::class => [
$this->prepareOrderPayment($orderPayment),
],
Invoice::class => [
$this->prepareInvoice($order, $orderItem),
],
InvoiceItem::class => [
$this->prepareInvoiceItem($invoiceItem),
],
]);
});
it('should returns the refunds stats', function () {
// Arrange.
$product = (new ProductFaker([
'attributes' => [
5 => 'new',
],
'attribute_value' => [
'new' => [
'boolean_value' => true,
],
],
]))
->getSimpleProductFactory()
->create();
$customer = Customer::factory()->create();
$cart = Cart::factory()->create([
'customer_id' => $customer->id,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'customer_email' => $customer->email,
'is_guest' => 0,
]);
$additional = [
'product_id' => $product->id,
'rating' => '0',
'is_buy_now' => '0',
'quantity' => '1',
];
$cartItem = CartItem::factory()->create([
'cart_id' => $cart->id,
'product_id' => $product->id,
'sku' => $product->sku,
'quantity' => $additional['quantity'],
'name' => $product->name,
'price' => $convertedPrice = core()->convertPrice($price = $product->price),
'base_price' => $price,
'total' => $convertedPrice * $additional['quantity'],
'base_total' => $price * $additional['quantity'],
'weight' => $product->weight ?? 0,
'total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'base_total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'type' => $product->type,
'additional' => $additional,
]);
$customerAddress = CustomerAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CustomerAddress::ADDRESS_TYPE,
]);
$cartBillingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_BILLING,
]);
$cartShippingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_SHIPPING,
]);
$cartPayment = CartPayment::factory()->create([
'cart_id' => $cart->id,
'method' => $paymentMethod = 'cashondelivery',
'method_title' => core()->getConfigData('sales.payment_methods.'.$paymentMethod.'.title'),
]);
$cartShippingRate = CartShippingRate::factory()->create([
'carrier' => 'free',
'carrier_title' => 'Free shipping',
'method' => 'free_free',
'method_title' => 'Free Shipping',
'method_description' => 'Free Shipping',
'cart_address_id' => $cartShippingAddress->id,
]);
$order = Order::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'customer_email' => $customer->email,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'status' => 'processing',
'sub_total_invoiced' => $product->price,
'base_sub_total_invoiced' => $product->price,
'base_tax_amount_invoiced' => $taxInvoiced = rand(20, 50),
'base_grand_total_refunded' => $grantTotalRefunded = $taxInvoiced - 10,
]);
$orderItem = OrderItem::factory()->create([
'product_id' => $product->id,
'order_id' => $order->id,
'sku' => $product->sku,
'type' => $product->type,
'name' => $product->name,
'qty_invoiced' => 1,
'base_total_invoiced' => $product->price,
]);
$orderBillingAddress = OrderAddress::factory()->create([
...Arr::except($cartBillingAddress->toArray(), ['id', 'created_at', 'updated_at']),
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_BILLING,
'order_id' => $order->id,
]);
$orderShippingAddress = OrderAddress::factory()->create([
...Arr::except($cartShippingAddress->toArray(), ['id', 'created_at', 'updated_at']),
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_SHIPPING,
'order_id' => $order->id,
]);
$orderPayment = OrderPayment::factory()->create([
'order_id' => $order->id,
'method' => 'cashondelivery',
]);
$invoice = Invoice::factory()->create([
'order_id' => $order->id,
'state' => 'paid',
'total_qty' => 1,
'base_currency_code' => $order->base_currency_code,
'channel_currency_code' => $order->channel_currency_code,
'order_currency_code' => $order->order_currency_code,
'email_sent' => 1,
'discount_amount' => 0,
'base_discount_amount' => 0,
'sub_total' => $orderItem->base_price,
'base_sub_total' => $orderItem->base_price,
'grand_total' => $orderItem->price,
'base_grand_total' => $orderItem->price,
]);
$invoiceItem = InvoiceItem::factory()->create([
'invoice_id' => $invoice->id,
'order_item_id' => $orderItem->id,
'name' => $orderItem->name,
'sku' => $orderItem->sku,
'qty' => 1,
'price' => $orderItem->price,
'base_price' => $orderItem->base_price,
'total' => $orderItem->price,
'base_total' => $orderItem->base_price,
'tax_amount' => (($orderItem->tax_amount / $orderItem->qty_ordered)),
'base_tax_amount' => (($orderItem->base_tax_amount / $orderItem->qty_ordered)),
'discount_amount' => (($orderItem->discount_amount / $orderItem->qty_ordered)),
'base_discount_amount' => (($orderItem->base_discount_amount / $orderItem->qty_ordered)),
'product_id' => $orderItem->product_id,
'product_type' => $orderItem->product_type,
'additional' => $orderItem->additional,
]);
$orderTransaction = OrderTransaction::factory()->create([
'transaction_id' => md5(uniqid()),
'type' => 'cashondelivery',
'payment_method' => 'cashondelivery',
'status' => $invoice->state,
'order_id' => $invoice->order->id,
'invoice_id' => $invoice->id,
'amount' => $invoice->grand_total,
]);
// Act and Assert.
$this->loginAsAdmin();
get(route('admin.reporting.sales.stats', [
'start' => Carbon::now()->copy()->subMonth(),
'type' => 'refunds',
'end' => Carbon::now()->addMonths(5),
]))
->assertOk()
->assertJsonPath('statistics.refunds.current', $grantTotalRefunded);
$cart->refresh();
$cartItem->refresh();
$cartBillingAddress->refresh();
$cartShippingAddress->refresh();
$orderBillingAddress->refresh();
$orderShippingAddress->refresh();
$order->refresh();
$orderItem->refresh();
$invoiceItem->refresh();
$orderTransaction->refresh();
$this->assertModelWise([
Cart::class => [
$this->prepareCart($cart),
],
CartItem::class => [
$this->prepareCartItem($cartItem),
],
CartPayment::class => [
$this->prepareCartPayment($cartPayment),
],
CartAddress::class => [
$this->prepareAddress($cartBillingAddress),
],
CartAddress::class => [
$this->prepareAddress($cartShippingAddress),
],
CartShippingRate::class => [
$this->prepareCartShippingRate($cartShippingRate),
],
CustomerAddress::class => [
$this->prepareAddress($customerAddress),
],
Order::class => [
$this->prepareOrder($order),
],
OrderItem::class => [
$this->prepareOrderItem($orderItem),
],
OrderAddress::class => [
$this->prepareAddress($orderBillingAddress),
$this->prepareAddress($orderShippingAddress),
],
OrderPayment::class => [
$this->prepareOrderPayment($orderPayment),
],
Invoice::class => [
$this->prepareInvoice($order, $orderItem),
],
InvoiceItem::class => [
$this->prepareInvoiceItem($invoiceItem),
],
]);
});
it('should returns the top payment methods stats', function () {
// Arrange.
$product = (new ProductFaker([
'attributes' => [
5 => 'new',
],
'attribute_value' => [
'new' => [
'boolean_value' => true,
],
],
]))
->getSimpleProductFactory()
->create();
$customer = Customer::factory()->create();
$cart = Cart::factory()->create([
'customer_id' => $customer->id,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'customer_email' => $customer->email,
'is_guest' => 0,
]);
$additional = [
'product_id' => $product->id,
'rating' => '0',
'is_buy_now' => '0',
'quantity' => '1',
];
$cartItem = CartItem::factory()->create([
'cart_id' => $cart->id,
'product_id' => $product->id,
'sku' => $product->sku,
'quantity' => $additional['quantity'],
'name' => $product->name,
'price' => $convertedPrice = core()->convertPrice($price = $product->price),
'base_price' => $price,
'total' => $convertedPrice * $additional['quantity'],
'base_total' => $price * $additional['quantity'],
'weight' => $product->weight ?? 0,
'total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'base_total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'type' => $product->type,
'additional' => $additional,
]);
$customerAddress = CustomerAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CustomerAddress::ADDRESS_TYPE,
]);
$cartBillingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_BILLING,
]);
$cartShippingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_SHIPPING,
]);
$cartPayment = CartPayment::factory()->create([
'cart_id' => $cart->id,
'method' => $paymentMethod = 'cashondelivery',
'method_title' => core()->getConfigData('sales.payment_methods.'.$paymentMethod.'.title'),
]);
$cartShippingRate = CartShippingRate::factory()->create([
'carrier' => 'free',
'carrier_title' => 'Free shipping',
'method' => 'free_free',
'method_title' => 'Free Shipping',
'method_description' => 'Free Shipping',
'cart_address_id' => $cartShippingAddress->id,
]);
$order = Order::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'customer_email' => $customer->email,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'status' => 'processing',
'sub_total_invoiced' => $product->price,
'base_sub_total_invoiced' => $product->price,
]);
$orderItem = OrderItem::factory()->create([
'product_id' => $product->id,
'order_id' => $order->id,
'sku' => $product->sku,
'type' => $product->type,
'name' => $product->name,
'qty_invoiced' => 1,
'base_total_invoiced' => $product->price,
]);
$orderBillingAddress = OrderAddress::factory()->create([
...Arr::except($cartBillingAddress->toArray(), ['id', 'created_at', 'updated_at']),
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_BILLING,
'order_id' => $order->id,
]);
$orderShippingAddress = OrderAddress::factory()->create([
...Arr::except($cartShippingAddress->toArray(), ['id', 'created_at', 'updated_at']),
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_SHIPPING,
'order_id' => $order->id,
]);
$orderPayment = OrderPayment::factory()->create([
'order_id' => $order->id,
'method' => 'cashondelivery',
]);
$invoice = Invoice::factory()->create([
'order_id' => $order->id,
'state' => 'paid',
'total_qty' => 1,
'base_currency_code' => $order->base_currency_code,
'channel_currency_code' => $order->channel_currency_code,
'order_currency_code' => $order->order_currency_code,
'email_sent' => 1,
'discount_amount' => 0,
'base_discount_amount' => 0,
'sub_total' => $orderItem->base_price,
'base_sub_total' => $orderItem->base_price,
'grand_total' => $orderItem->price,
'base_grand_total' => $orderItem->price,
]);
$invoiceItem = InvoiceItem::factory()->create([
'invoice_id' => $invoice->id,
'order_item_id' => $orderItem->id,
'name' => $orderItem->name,
'sku' => $orderItem->sku,
'qty' => 1,
'price' => $orderItem->price,
'base_price' => $orderItem->base_price,
'total' => $orderItem->price,
'base_total' => $orderItem->base_price,
'tax_amount' => (($orderItem->tax_amount / $orderItem->qty_ordered)),
'base_tax_amount' => (($orderItem->base_tax_amount / $orderItem->qty_ordered)),
'discount_amount' => (($orderItem->discount_amount / $orderItem->qty_ordered)),
'base_discount_amount' => (($orderItem->base_discount_amount / $orderItem->qty_ordered)),
'product_id' => $orderItem->product_id,
'product_type' => $orderItem->product_type,
'additional' => $orderItem->additional,
]);
$orderTransaction = OrderTransaction::factory()->create([
'transaction_id' => md5(uniqid()),
'type' => 'cashondelivery',
'payment_method' => 'cashondelivery',
'status' => $invoice->state,
'order_id' => $invoice->order->id,
'invoice_id' => $invoice->id,
'amount' => $invoice->grand_total,
]);
// Act and Assert.
$this->loginAsAdmin();
get(route('admin.reporting.sales.stats', [
'start' => Carbon::now()->copy()->subMonth(),
'type' => 'top-payment-methods',
'end' => Carbon::now()->addMonths(5),
]))
->assertOk()
->assertJsonPath('statistics.0.method', 'cashondelivery')
->assertJsonPath('statistics.0.title', 'Cash On Delivery');
$cart->refresh();
$cartItem->refresh();
$cartBillingAddress->refresh();
$cartShippingAddress->refresh();
$orderBillingAddress->refresh();
$orderShippingAddress->refresh();
$order->refresh();
$orderItem->refresh();
$invoiceItem->refresh();
$orderTransaction->refresh();
$this->assertModelWise([
Cart::class => [
$this->prepareCart($cart),
],
CartItem::class => [
$this->prepareCartItem($cartItem),
],
CartPayment::class => [
$this->prepareCartPayment($cartPayment),
],
CartAddress::class => [
$this->prepareAddress($cartBillingAddress),
],
CartAddress::class => [
$this->prepareAddress($cartShippingAddress),
],
CartShippingRate::class => [
$this->prepareCartShippingRate($cartShippingRate),
],
CustomerAddress::class => [
$this->prepareAddress($customerAddress),
],
Order::class => [
$this->prepareOrder($order),
],
OrderItem::class => [
$this->prepareOrderItem($orderItem),
],
OrderAddress::class => [
$this->prepareAddress($orderBillingAddress),
$this->prepareAddress($orderShippingAddress),
],
OrderPayment::class => [
$this->prepareOrderPayment($orderPayment),
],
Invoice::class => [
$this->prepareInvoice($order, $orderItem),
],
InvoiceItem::class => [
$this->prepareInvoiceItem($invoiceItem),
],
]);
});
it('should return the view page of sales stats', function () {
// Arrange.
$product = (new ProductFaker([
'attributes' => [
5 => 'new',
],
'attribute_value' => [
'new' => [
'boolean_value' => true,
],
],
]))
->getSimpleProductFactory()
->create();
$customer = Customer::factory()->create();
$cart = Cart::factory()->create([
'customer_id' => $customer->id,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'customer_email' => $customer->email,
'is_guest' => 0,
]);
$additional = [
'product_id' => $product->id,
'rating' => '0',
'is_buy_now' => '0',
'quantity' => '1',
];
$cartItem = CartItem::factory()->create([
'cart_id' => $cart->id,
'product_id' => $product->id,
'sku' => $product->sku,
'quantity' => $additional['quantity'],
'name' => $product->name,
'price' => $convertedPrice = core()->convertPrice($price = $product->price),
'base_price' => $price,
'total' => $convertedPrice * $additional['quantity'],
'base_total' => $price * $additional['quantity'],
'weight' => $product->weight ?? 0,
'total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'base_total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'type' => $product->type,
'additional' => $additional,
]);
$customerAddress = CustomerAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CustomerAddress::ADDRESS_TYPE,
]);
$cartBillingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_BILLING,
]);
$cartShippingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_SHIPPING,
]);
$cartPayment = CartPayment::factory()->create([
'cart_id' => $cart->id,
'method' => $paymentMethod = 'cashondelivery',
'method_title' => core()->getConfigData('sales.payment_methods.'.$paymentMethod.'.title'),
]);
$cartShippingRate = CartShippingRate::factory()->create([
'carrier' => 'free',
'carrier_title' => 'Free shipping',
'method' => 'free_free',
'method_title' => 'Free Shipping',
'method_description' => 'Free Shipping',
'cart_address_id' => $cartShippingAddress->id,
]);
$order = Order::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'customer_email' => $customer->email,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'status' => 'processing',
'sub_total_invoiced' => $product->price,
'base_sub_total_invoiced' => $product->price,
]);
$orderItem = OrderItem::factory()->create([
'product_id' => $product->id,
'order_id' => $order->id,
'sku' => $product->sku,
'type' => $product->type,
'name' => $product->name,
'qty_invoiced' => 1,
'base_total_invoiced' => $product->price,
]);
$orderBillingAddress = OrderAddress::factory()->create([
...Arr::except($cartBillingAddress->toArray(), ['id', 'created_at', 'updated_at']),
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_BILLING,
'order_id' => $order->id,
]);
$orderShippingAddress = OrderAddress::factory()->create([
...Arr::except($cartShippingAddress->toArray(), ['id', 'created_at', 'updated_at']),
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_SHIPPING,
'order_id' => $order->id,
]);
$orderPayment = OrderPayment::factory()->create([
'order_id' => $order->id,
'method' => 'cashondelivery',
]);
$invoice = Invoice::factory()->create([
'order_id' => $order->id,
'state' => 'paid',
'total_qty' => 1,
'base_currency_code' => $order->base_currency_code,
'channel_currency_code' => $order->channel_currency_code,
'order_currency_code' => $order->order_currency_code,
'email_sent' => 1,
'discount_amount' => 0,
'base_discount_amount' => 0,
'sub_total' => $orderItem->base_price,
'base_sub_total' => $orderItem->base_price,
'grand_total' => $orderItem->price,
'base_grand_total' => $orderItem->price,
]);
$invoiceItem = InvoiceItem::factory()->create([
'invoice_id' => $invoice->id,
'order_item_id' => $orderItem->id,
'name' => $orderItem->name,
'sku' => $orderItem->sku,
'qty' => 1,
'price' => $orderItem->price,
'base_price' => $orderItem->base_price,
'total' => $orderItem->price,
'base_total' => $orderItem->base_price,
'tax_amount' => (($orderItem->tax_amount / $orderItem->qty_ordered)),
'base_tax_amount' => (($orderItem->base_tax_amount / $orderItem->qty_ordered)),
'discount_amount' => (($orderItem->discount_amount / $orderItem->qty_ordered)),
'base_discount_amount' => (($orderItem->base_discount_amount / $orderItem->qty_ordered)),
'product_id' => $orderItem->product_id,
'product_type' => $orderItem->product_type,
'additional' => $orderItem->additional,
]);
$orderTransaction = OrderTransaction::factory()->create([
'transaction_id' => md5(uniqid()),
'type' => 'cashondelivery',
'payment_method' => 'cashondelivery',
'status' => $invoice->state,
'order_id' => $invoice->order->id,
'invoice_id' => $invoice->id,
'amount' => $invoice->grand_total,
]);
// Act and Assert.
$this->loginAsAdmin();
get(route('admin.reporting.sales.view', [
'type' => 'total-sales',
]))
->assertOk()
->assertSeeText(trans('admin::app.reporting.sales.index.total-sales'));
$cart->refresh();
$cartItem->refresh();
$cartBillingAddress->refresh();
$cartShippingAddress->refresh();
$orderBillingAddress->refresh();
$orderShippingAddress->refresh();
$order->refresh();
$orderItem->refresh();
$invoiceItem->refresh();
$orderTransaction->refresh();
$this->assertModelWise([
Cart::class => [
$this->prepareCart($cart),
],
CartItem::class => [
$this->prepareCartItem($cartItem),
],
CartPayment::class => [
$this->prepareCartPayment($cartPayment),
],
CartAddress::class => [
$this->prepareAddress($cartBillingAddress),
],
CartAddress::class => [
$this->prepareAddress($cartShippingAddress),
],
CartShippingRate::class => [
$this->prepareCartShippingRate($cartShippingRate),
],
CustomerAddress::class => [
$this->prepareAddress($customerAddress),
],
Order::class => [
$this->prepareOrder($order),
],
OrderItem::class => [
$this->prepareOrderItem($orderItem),
],
OrderAddress::class => [
$this->prepareAddress($orderBillingAddress),
$this->prepareAddress($orderShippingAddress),
],
OrderPayment::class => [
$this->prepareOrderPayment($orderPayment),
],
Invoice::class => [
$this->prepareInvoice($order, $orderItem),
],
InvoiceItem::class => [
$this->prepareInvoiceItem($invoiceItem),
],
]);
});
it('should export the sales stats', function () {
// Arrange.
$product = (new ProductFaker([
'attributes' => [
5 => 'new',
],
'attribute_value' => [
'new' => [
'boolean_value' => true,
],
],
]))
->getSimpleProductFactory()
->create();
$customer = Customer::factory()->create();
$cart = Cart::factory()->create([
'customer_id' => $customer->id,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'customer_email' => $customer->email,
'is_guest' => 0,
]);
$customer = Customer::factory()->create();
$cart = Cart::factory()->create([
'customer_id' => $customer->id,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'customer_email' => $customer->email,
'is_guest' => 0,
]);
$additional = [
'product_id' => $product->id,
'rating' => '0',
'is_buy_now' => '0',
'quantity' => '1',
];
$cartItem = CartItem::factory()->create([
'cart_id' => $cart->id,
'product_id' => $product->id,
'sku' => $product->sku,
'quantity' => $additional['quantity'],
'name' => $product->name,
'price' => $convertedPrice = core()->convertPrice($price = $product->price),
'base_price' => $price,
'total' => $convertedPrice * $additional['quantity'],
'base_total' => $price * $additional['quantity'],
'weight' => $product->weight ?? 0,
'total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'base_total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'type' => $product->type,
'additional' => $additional,
]);
$customerAddress = CustomerAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CustomerAddress::ADDRESS_TYPE,
]);
$cartBillingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_BILLING,
]);
$cartShippingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_SHIPPING,
]);
$cartPayment = CartPayment::factory()->create([
'cart_id' => $cart->id,
'method' => $paymentMethod = 'cashondelivery',
'method_title' => core()->getConfigData('sales.payment_methods.'.$paymentMethod.'.title'),
]);
$cartShippingRate = CartShippingRate::factory()->create([
'carrier' => 'free',
'carrier_title' => 'Free shipping',
'method' => 'free_free',
'method_title' => 'Free Shipping',
'method_description' => 'Free Shipping',
'cart_address_id' => $cartShippingAddress->id,
]);
$order = Order::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'customer_email' => $customer->email,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
]);
$orderItem = OrderItem::factory()->create([
'product_id' => $product->id,
'order_id' => $order->id,
'sku' => $product->sku,
'type' => $product->type,
'name' => $product->name,
]);
$orderBillingAddress = OrderAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_BILLING,
]);
$orderShippingAddress = OrderAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_SHIPPING,
]);
$orderPayment = OrderPayment::factory()->create([
'order_id' => $order->id,
]);
// Act and Assert.
$this->loginAsAdmin();
$period = fake()->randomElement(['day', 'month', 'year']);
$start = Carbon::now();
if ($period === 'day') {
$end = $start->copy()->addDay();
} elseif ($period === 'month') {
$end = $start->copy()->addMonth();
} else {
$end = $start->copy()->addYear();
}
get(route('admin.reporting.sales.export', [
'start' => $start->toDateString(),
'end' => $end->toDateString(),
'format' => $format = fake()->randomElement(['csv', 'xls']),
'period' => $period,
'type' => 'total-sales',
]))
->assertOk()
->assertDownload('total-sales.'.$format);
$cart->refresh();
$cartItem->refresh();
$cartBillingAddress->refresh();
$cartShippingAddress->refresh();
$orderBillingAddress->refresh();
$orderShippingAddress->refresh();
$order->refresh();
$orderItem->refresh();
$this->assertModelWise([
Cart::class => [
$this->prepareCart($cart),
],
CartItem::class => [
$this->prepareCartItem($cartItem),
],
CartPayment::class => [
$this->prepareCartPayment($cartPayment),
],
CartAddress::class => [
$this->prepareAddress($cartBillingAddress),
],
CartAddress::class => [
$this->prepareAddress($cartShippingAddress),
],
CartShippingRate::class => [
$this->prepareCartShippingRate($cartShippingRate),
],
CustomerAddress::class => [
$this->prepareAddress($customerAddress),
],
Order::class => [
$this->prepareOrder($order),
],
OrderItem::class => [
$this->prepareOrderItem($orderItem),
],
OrderAddress::class => [
$this->prepareAddress($orderBillingAddress),
$this->prepareAddress($orderShippingAddress),
],
OrderPayment::class => [
$this->prepareOrderPayment($orderPayment),
],
]);
});
?>
Did this file decode correctly?
Original Code
<?php
use Carbon\Carbon;
use Illuminate\Support\Arr;
use Webkul\Checkout\Models\Cart;
use Webkul\Checkout\Models\CartAddress;
use Webkul\Checkout\Models\CartItem;
use Webkul\Checkout\Models\CartPayment;
use Webkul\Checkout\Models\CartShippingRate;
use Webkul\Customer\Models\Customer;
use Webkul\Customer\Models\CustomerAddress;
use Webkul\Faker\Helpers\Product as ProductFaker;
use Webkul\Sales\Models\Invoice;
use Webkul\Sales\Models\InvoiceItem;
use Webkul\Sales\Models\Order;
use Webkul\Sales\Models\OrderAddress;
use Webkul\Sales\Models\OrderItem;
use Webkul\Sales\Models\OrderPayment;
use Webkul\Sales\Models\OrderTransaction;
use function Pest\Laravel\get;
it('should return the sales index page', function () {
// Act and Assert.
$this->loginAsAdmin();
get(route('admin.reporting.sales.index'))
->assertOk()
->assertSeeText(trans('admin::app.reporting.sales.index.title'))
->assertSeeText(trans('admin::app.reporting.sales.index.refunds'))
->assertSeeText(trans('admin::app.reporting.sales.index.total-sales'));
});
it('should returns the sales stats', function () {
// Arrange.
$product = (new ProductFaker([
'attributes' => [
5 => 'new',
],
'attribute_value' => [
'new' => [
'boolean_value' => true,
],
],
]))
->getSimpleProductFactory()
->create();
$customer = Customer::factory()->create();
$cart = Cart::factory()->create([
'customer_id' => $customer->id,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'customer_email' => $customer->email,
'is_guest' => 0,
]);
$additional = [
'product_id' => $product->id,
'rating' => '0',
'is_buy_now' => '0',
'quantity' => '1',
];
$cartItem = CartItem::factory()->create([
'cart_id' => $cart->id,
'product_id' => $product->id,
'sku' => $product->sku,
'quantity' => $additional['quantity'],
'name' => $product->name,
'price' => $convertedPrice = core()->convertPrice($price = $product->price),
'base_price' => $price,
'total' => $convertedPrice * $additional['quantity'],
'base_total' => $price * $additional['quantity'],
'weight' => $product->weight ?? 0,
'total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'base_total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'type' => $product->type,
'additional' => $additional,
]);
$customerAddress = CustomerAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CustomerAddress::ADDRESS_TYPE,
]);
$cartBillingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_BILLING,
]);
$cartShippingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_SHIPPING,
]);
$cartPayment = CartPayment::factory()->create([
'cart_id' => $cart->id,
'method' => $paymentMethod = 'cashondelivery',
'method_title' => core()->getConfigData('sales.payment_methods.'.$paymentMethod.'.title'),
]);
$cartShippingRate = CartShippingRate::factory()->create([
'carrier' => 'free',
'carrier_title' => 'Free shipping',
'method' => 'free_free',
'method_title' => 'Free Shipping',
'method_description' => 'Free Shipping',
'cart_address_id' => $cartShippingAddress->id,
]);
$order = Order::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'customer_email' => $customer->email,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'status' => 'processing',
'sub_total_invoiced' => $product->price,
'base_sub_total_invoiced' => $product->price,
]);
$orderItem = OrderItem::factory()->create([
'product_id' => $product->id,
'order_id' => $order->id,
'sku' => $product->sku,
'type' => $product->type,
'name' => $product->name,
'qty_invoiced' => 1,
'base_total_invoiced' => $product->price,
]);
$orderBillingAddress = OrderAddress::factory()->create([
...Arr::except($cartBillingAddress->toArray(), ['id', 'created_at', 'updated_at']),
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_BILLING,
'order_id' => $order->id,
]);
$orderShippingAddress = OrderAddress::factory()->create([
...Arr::except($cartShippingAddress->toArray(), ['id', 'created_at', 'updated_at']),
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_SHIPPING,
'order_id' => $order->id,
]);
$orderPayment = OrderPayment::factory()->create([
'order_id' => $order->id,
'method' => 'cashondelivery',
]);
$invoice = Invoice::factory()->create([
'order_id' => $order->id,
'state' => 'paid',
'total_qty' => 1,
'base_currency_code' => $order->base_currency_code,
'channel_currency_code' => $order->channel_currency_code,
'order_currency_code' => $order->order_currency_code,
'email_sent' => 1,
'discount_amount' => 0,
'base_discount_amount' => 0,
'sub_total' => $orderItem->base_price,
'base_sub_total' => $orderItem->base_price,
'grand_total' => $orderItem->price,
'base_grand_total' => $orderItem->price,
]);
$invoiceItem = InvoiceItem::factory()->create([
'invoice_id' => $invoice->id,
'order_item_id' => $orderItem->id,
'name' => $orderItem->name,
'sku' => $orderItem->sku,
'qty' => 1,
'price' => $orderItem->price,
'base_price' => $orderItem->base_price,
'total' => $orderItem->price,
'base_total' => $orderItem->base_price,
'tax_amount' => (($orderItem->tax_amount / $orderItem->qty_ordered)),
'base_tax_amount' => (($orderItem->base_tax_amount / $orderItem->qty_ordered)),
'discount_amount' => (($orderItem->discount_amount / $orderItem->qty_ordered)),
'base_discount_amount' => (($orderItem->base_discount_amount / $orderItem->qty_ordered)),
'product_id' => $orderItem->product_id,
'product_type' => $orderItem->product_type,
'additional' => $orderItem->additional,
]);
$orderTransaction = OrderTransaction::factory()->create([
'transaction_id' => md5(uniqid()),
'type' => 'cashondelivery',
'payment_method' => 'cashondelivery',
'status' => 'paid',
'status' => $invoice->state,
'order_id' => $invoice->order->id,
'invoice_id' => $invoice->id,
'amount' => $invoice->grand_total,
]);
// Act and Assert.
$this->loginAsAdmin();
$response = get(route('admin.reporting.sales.stats', [
'type' => 'total-sales',
]))
->assertOk()
->assertJsonPath('statistics.sales.progress', 100)
->assertJsonPath('statistics.over_time.current.30.count', 1)
->assertJsonPath('statistics.sales.formatted_total', core()->formatBasePrice($order->grand_total));
$this->assertPrice($order->grand_total, $response->json('statistics.sales.current'));
$cart->refresh();
$cartItem->refresh();
$cartBillingAddress->refresh();
$cartShippingAddress->refresh();
$orderBillingAddress->refresh();
$orderShippingAddress->refresh();
$order->refresh();
$orderItem->refresh();
$invoiceItem->refresh();
$orderTransaction->refresh();
$this->assertModelWise([
Cart::class => [
$this->prepareCart($cart),
],
CartItem::class => [
$this->prepareCartItem($cartItem),
],
CartPayment::class => [
$this->prepareCartPayment($cartPayment),
],
CartAddress::class => [
$this->prepareAddress($cartBillingAddress),
],
CartAddress::class => [
$this->prepareAddress($cartShippingAddress),
],
CartShippingRate::class => [
$this->prepareCartShippingRate($cartShippingRate),
],
CustomerAddress::class => [
$this->prepareAddress($customerAddress),
],
Order::class => [
$this->prepareOrder($order),
],
OrderItem::class => [
$this->prepareOrderItem($orderItem),
],
OrderAddress::class => [
$this->prepareAddress($orderBillingAddress),
$this->prepareAddress($orderShippingAddress),
],
OrderPayment::class => [
$this->prepareOrderPayment($orderPayment),
],
Invoice::class => [
$this->prepareInvoice($order, $orderItem),
],
InvoiceItem::class => [
$this->prepareInvoiceItem($invoiceItem),
],
]);
});
it('should returns the purchase funnel stats', function () {
// Arrange.
$product = (new ProductFaker([
'attributes' => [
5 => 'new',
],
'attribute_value' => [
'new' => [
'boolean_value' => true,
],
],
]))
->getSimpleProductFactory()
->create();
$customer = Customer::factory()->create();
visitor()->visit($customer);
$customer = Customer::factory()->create();
$cart = Cart::factory()->create([
'customer_id' => $customer->id,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'customer_email' => $customer->email,
'is_guest' => 0,
]);
$additional = [
'product_id' => $product->id,
'rating' => '0',
'is_buy_now' => '0',
'quantity' => '1',
];
$cartItem = CartItem::factory()->create([
'cart_id' => $cart->id,
'product_id' => $product->id,
'sku' => $product->sku,
'quantity' => $additional['quantity'],
'name' => $product->name,
'price' => $convertedPrice = core()->convertPrice($price = $product->price),
'base_price' => $price,
'total' => $convertedPrice * $additional['quantity'],
'base_total' => $price * $additional['quantity'],
'weight' => $product->weight ?? 0,
'total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'base_total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'type' => $product->type,
'additional' => $additional,
]);
$customerAddress = CustomerAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CustomerAddress::ADDRESS_TYPE,
]);
$cartBillingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_BILLING,
]);
$cartShippingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_SHIPPING,
]);
$cartPayment = CartPayment::factory()->create([
'cart_id' => $cart->id,
'method' => $paymentMethod = 'cashondelivery',
'method_title' => core()->getConfigData('sales.payment_methods.'.$paymentMethod.'.title'),
]);
$cartShippingRate = CartShippingRate::factory()->create([
'carrier' => 'free',
'carrier_title' => 'Free shipping',
'method' => 'free_free',
'method_title' => 'Free Shipping',
'method_description' => 'Free Shipping',
'cart_address_id' => $cartShippingAddress->id,
]);
$order = Order::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'customer_email' => $customer->email,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'status' => 'processing',
'sub_total_invoiced' => $product->price,
'base_sub_total_invoiced' => $product->price,
]);
$orderItem = OrderItem::factory()->create([
'product_id' => $product->id,
'order_id' => $order->id,
'sku' => $product->sku,
'type' => $product->type,
'name' => $product->name,
'qty_invoiced' => 1,
'base_total_invoiced' => $product->price,
]);
$orderBillingAddress = OrderAddress::factory()->create([
...Arr::except($cartBillingAddress->toArray(), ['id', 'created_at', 'updated_at']),
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_BILLING,
'order_id' => $order->id,
]);
$orderShippingAddress = OrderAddress::factory()->create([
...Arr::except($cartShippingAddress->toArray(), ['id', 'created_at', 'updated_at']),
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_SHIPPING,
'order_id' => $order->id,
]);
$orderPayment = OrderPayment::factory()->create([
'order_id' => $order->id,
'method' => 'cashondelivery',
]);
$invoice = Invoice::factory()->create([
'order_id' => $order->id,
'state' => 'paid',
'total_qty' => 1,
'base_currency_code' => $order->base_currency_code,
'channel_currency_code' => $order->channel_currency_code,
'order_currency_code' => $order->order_currency_code,
'email_sent' => 1,
'discount_amount' => 0,
'base_discount_amount' => 0,
'sub_total' => $orderItem->base_price,
'base_sub_total' => $orderItem->base_price,
'grand_total' => $orderItem->price,
'base_grand_total' => $orderItem->price,
]);
$invoiceItem = InvoiceItem::factory()->create([
'invoice_id' => $invoice->id,
'order_item_id' => $orderItem->id,
'name' => $orderItem->name,
'sku' => $orderItem->sku,
'qty' => 1,
'price' => $orderItem->price,
'base_price' => $orderItem->base_price,
'total' => $orderItem->price,
'base_total' => $orderItem->base_price,
'tax_amount' => (($orderItem->tax_amount / $orderItem->qty_ordered)),
'base_tax_amount' => (($orderItem->base_tax_amount / $orderItem->qty_ordered)),
'discount_amount' => (($orderItem->discount_amount / $orderItem->qty_ordered)),
'base_discount_amount' => (($orderItem->base_discount_amount / $orderItem->qty_ordered)),
'product_id' => $orderItem->product_id,
'product_type' => $orderItem->product_type,
'additional' => $orderItem->additional,
]);
$orderTransaction = OrderTransaction::factory()->create([
'transaction_id' => md5(uniqid()),
'type' => 'cashondelivery',
'payment_method' => 'cashondelivery',
'status' => 'paid',
'status' => $invoice->state,
'order_id' => $invoice->order->id,
'invoice_id' => $invoice->id,
'amount' => $invoice->grand_total,
]);
// Act and Assert.
$this->loginAsAdmin();
get(route('admin.reporting.sales.stats', [
'type' => 'purchase-funnel',
]))
->assertOk()
->assertJsonPath('statistics.visitors.total', 1)
->assertJsonPath('statistics.carts.total', 1)
->assertJsonPath('statistics.orders.total', 1);
$cart->refresh();
$cartItem->refresh();
$cartBillingAddress->refresh();
$cartShippingAddress->refresh();
$orderBillingAddress->refresh();
$orderShippingAddress->refresh();
$order->refresh();
$orderItem->refresh();
$invoiceItem->refresh();
$orderTransaction->refresh();
$this->assertModelWise([
Cart::class => [
$this->prepareCart($cart),
],
CartItem::class => [
$this->prepareCartItem($cartItem),
],
CartPayment::class => [
$this->prepareCartPayment($cartPayment),
],
CartAddress::class => [
$this->prepareAddress($cartBillingAddress),
],
CartAddress::class => [
$this->prepareAddress($cartShippingAddress),
],
CartShippingRate::class => [
$this->prepareCartShippingRate($cartShippingRate),
],
CustomerAddress::class => [
$this->prepareAddress($customerAddress),
],
Order::class => [
$this->prepareOrder($order),
],
OrderItem::class => [
$this->prepareOrderItem($orderItem),
],
OrderAddress::class => [
$this->prepareAddress($orderBillingAddress),
$this->prepareAddress($orderShippingAddress),
],
OrderPayment::class => [
$this->prepareOrderPayment($orderPayment),
],
Invoice::class => [
$this->prepareInvoice($order, $orderItem),
],
InvoiceItem::class => [
$this->prepareInvoiceItem($invoiceItem),
],
]);
});
it('should returns the abandoned carts stats', function () {
// Arrange.
$product = (new ProductFaker([
'attributes' => [
5 => 'new',
],
'attribute_value' => [
'new' => [
'boolean_value' => true,
],
],
]))
->getSimpleProductFactory()
->create();
$additional = [
'product_id' => $product->id,
'rating' => '0',
'is_buy_now' => '0',
'quantity' => '1',
];
$customer = Customer::factory()->create();
$cart = Cart::factory()->create([
'customer_id' => $customer->id,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'customer_email' => $customer->email,
'created_at' => Carbon::now()->subMonth()->toDateString(),
'is_guest' => 0,
]);
CartItem::factory()->create([
'cart_id' => $cart->id,
'product_id' => $product->id,
'sku' => $product->sku,
'quantity' => $additional['quantity'],
'name' => $product->name,
'price' => $convertedPrice = core()->convertPrice($price = $product->price),
'base_price' => $price,
'total' => $convertedPrice * $additional['quantity'],
'base_total' => $price * $additional['quantity'],
'weight' => $product->weight ?? 0,
'total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'base_total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'type' => $product->type,
'additional' => $additional,
]);
// Act and Assert.
$this->loginAsAdmin();
get(route('admin.reporting.sales.stats', [
'start' => Carbon::now()->copy()->subMonth()->toDateString(),
'type' => 'abandoned-carts',
'end' => Carbon::now()->addMonths(5)->toDateString(),
]))
->assertOk()
->assertJsonPath('statistics.carts.current', 1)
->assertJsonPath('statistics.rate.current', 100)
->assertJsonPath('statistics.rate.progress', 100)
->assertJsonPath('statistics.products.0.id', $product->id)
->assertJsonPath('statistics.products.0.name', $product->name)
->assertJsonPath('statistics.products.0.count', 1)
->assertJsonPath('statistics.products.0.progress', 100);
});
it('should returns the total orders stats', function () {
// Arrange.
$product = (new ProductFaker([
'attributes' => [
5 => 'new',
],
'attribute_value' => [
'new' => [
'boolean_value' => true,
],
],
]))
->getSimpleProductFactory()
->create();
$customer = Customer::factory()->create();
$cart = Cart::factory()->create([
'customer_id' => $customer->id,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'customer_email' => $customer->email,
'is_guest' => 0,
]);
$additional = [
'product_id' => $product->id,
'rating' => '0',
'is_buy_now' => '0',
'quantity' => '1',
];
$cartItem = CartItem::factory()->create([
'cart_id' => $cart->id,
'product_id' => $product->id,
'sku' => $product->sku,
'quantity' => $additional['quantity'],
'name' => $product->name,
'price' => $convertedPrice = core()->convertPrice($price = $product->price),
'base_price' => $price,
'total' => $convertedPrice * $additional['quantity'],
'base_total' => $price * $additional['quantity'],
'weight' => $product->weight ?? 0,
'total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'base_total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'type' => $product->type,
'additional' => $additional,
]);
$customerAddress = CustomerAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CustomerAddress::ADDRESS_TYPE,
]);
$cartBillingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_BILLING,
]);
$cartShippingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_SHIPPING,
]);
$cartPayment = CartPayment::factory()->create([
'cart_id' => $cart->id,
'method' => $paymentMethod = 'cashondelivery',
'method_title' => core()->getConfigData('sales.payment_methods.'.$paymentMethod.'.title'),
]);
$cartShippingRate = CartShippingRate::factory()->create([
'carrier' => 'free',
'carrier_title' => 'Free shipping',
'method' => 'free_free',
'method_title' => 'Free Shipping',
'method_description' => 'Free Shipping',
'cart_address_id' => $cartShippingAddress->id,
]);
$order = Order::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'customer_email' => $customer->email,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'status' => 'processing',
'sub_total_invoiced' => $product->price,
'base_sub_total_invoiced' => $product->price,
]);
$orderItem = OrderItem::factory()->create([
'product_id' => $product->id,
'order_id' => $order->id,
'sku' => $product->sku,
'type' => $product->type,
'name' => $product->name,
'qty_invoiced' => 1,
'base_total_invoiced' => $product->price,
]);
$orderBillingAddress = OrderAddress::factory()->create([
...Arr::except($cartBillingAddress->toArray(), ['id', 'created_at', 'updated_at']),
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_BILLING,
'order_id' => $order->id,
]);
$orderShippingAddress = OrderAddress::factory()->create([
...Arr::except($cartShippingAddress->toArray(), ['id', 'created_at', 'updated_at']),
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_SHIPPING,
'order_id' => $order->id,
]);
$orderPayment = OrderPayment::factory()->create([
'order_id' => $order->id,
'method' => 'cashondelivery',
]);
$invoice = Invoice::factory()->create([
'order_id' => $order->id,
'state' => 'paid',
'total_qty' => 1,
'base_currency_code' => $order->base_currency_code,
'channel_currency_code' => $order->channel_currency_code,
'order_currency_code' => $order->order_currency_code,
'email_sent' => 1,
'discount_amount' => 0,
'base_discount_amount' => 0,
'sub_total' => $orderItem->base_price,
'base_sub_total' => $orderItem->base_price,
'grand_total' => $orderItem->price,
'base_grand_total' => $orderItem->price,
]);
$invoiceItem = InvoiceItem::factory()->create([
'invoice_id' => $invoice->id,
'order_item_id' => $orderItem->id,
'name' => $orderItem->name,
'sku' => $orderItem->sku,
'qty' => 1,
'price' => $orderItem->price,
'base_price' => $orderItem->base_price,
'total' => $orderItem->price,
'base_total' => $orderItem->base_price,
'tax_amount' => (($orderItem->tax_amount / $orderItem->qty_ordered)),
'base_tax_amount' => (($orderItem->base_tax_amount / $orderItem->qty_ordered)),
'discount_amount' => (($orderItem->discount_amount / $orderItem->qty_ordered)),
'base_discount_amount' => (($orderItem->base_discount_amount / $orderItem->qty_ordered)),
'product_id' => $orderItem->product_id,
'product_type' => $orderItem->product_type,
'additional' => $orderItem->additional,
]);
$orderTransaction = OrderTransaction::factory()->create([
'transaction_id' => md5(uniqid()),
'type' => 'cashondelivery',
'payment_method' => 'cashondelivery',
'status' => 'paid',
'status' => $invoice->state,
'order_id' => $invoice->order->id,
'invoice_id' => $invoice->id,
'amount' => $invoice->grand_total,
]);
// Act and Assert.
$this->loginAsAdmin();
get(route('admin.reporting.sales.stats', [
'start' => Carbon::now()->copy()->subMonth(),
'type' => 'total-orders',
'end' => Carbon::now()->addMonths(5),
]))
->assertOk()
->assertJsonPath('statistics.orders.current', 1)
->assertJsonPath('statistics.orders.progress', 100);
$cart->refresh();
$cartItem->refresh();
$cartBillingAddress->refresh();
$cartShippingAddress->refresh();
$orderBillingAddress->refresh();
$orderShippingAddress->refresh();
$order->refresh();
$orderItem->refresh();
$invoiceItem->refresh();
$orderTransaction->refresh();
$this->assertModelWise([
Cart::class => [
$this->prepareCart($cart),
],
CartItem::class => [
$this->prepareCartItem($cartItem),
],
CartPayment::class => [
$this->prepareCartPayment($cartPayment),
],
CartAddress::class => [
$this->prepareAddress($cartBillingAddress),
],
CartAddress::class => [
$this->prepareAddress($cartShippingAddress),
],
CartShippingRate::class => [
$this->prepareCartShippingRate($cartShippingRate),
],
CustomerAddress::class => [
$this->prepareAddress($customerAddress),
],
Order::class => [
$this->prepareOrder($order),
],
OrderItem::class => [
$this->prepareOrderItem($orderItem),
],
OrderAddress::class => [
$this->prepareAddress($orderBillingAddress),
$this->prepareAddress($orderShippingAddress),
],
OrderPayment::class => [
$this->prepareOrderPayment($orderPayment),
],
Invoice::class => [
$this->prepareInvoice($order, $orderItem),
],
InvoiceItem::class => [
$this->prepareInvoiceItem($invoiceItem),
],
]);
});
it('should returns the average sale stats', function () {
// Arrange.
$product = (new ProductFaker([
'attributes' => [
5 => 'new',
],
'attribute_value' => [
'new' => [
'boolean_value' => true,
],
],
]))
->getSimpleProductFactory()
->create();
$customer = Customer::factory()->create();
$cart = Cart::factory()->create([
'customer_id' => $customer->id,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'customer_email' => $customer->email,
'is_guest' => 0,
]);
$additional = [
'product_id' => $product->id,
'rating' => '0',
'is_buy_now' => '0',
'quantity' => '1',
];
$cartItem = CartItem::factory()->create([
'cart_id' => $cart->id,
'product_id' => $product->id,
'sku' => $product->sku,
'quantity' => $additional['quantity'],
'name' => $product->name,
'price' => $convertedPrice = core()->convertPrice($price = $product->price),
'base_price' => $price,
'total' => $convertedPrice * $additional['quantity'],
'base_total' => $price * $additional['quantity'],
'weight' => $product->weight ?? 0,
'total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'base_total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'type' => $product->type,
'additional' => $additional,
]);
$customerAddress = CustomerAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CustomerAddress::ADDRESS_TYPE,
]);
$cartBillingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_BILLING,
]);
$cartShippingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_SHIPPING,
]);
$cartPayment = CartPayment::factory()->create([
'cart_id' => $cart->id,
'method' => $paymentMethod = 'cashondelivery',
'method_title' => core()->getConfigData('sales.payment_methods.'.$paymentMethod.'.title'),
]);
$cartShippingRate = CartShippingRate::factory()->create([
'carrier' => 'free',
'carrier_title' => 'Free shipping',
'method' => 'free_free',
'method_title' => 'Free Shipping',
'method_description' => 'Free Shipping',
'cart_address_id' => $cartShippingAddress->id,
]);
$order = Order::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'customer_email' => $customer->email,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'status' => 'processing',
'sub_total_invoiced' => $product->price,
'base_sub_total_invoiced' => $product->price,
]);
$orderItem = OrderItem::factory()->create([
'product_id' => $product->id,
'order_id' => $order->id,
'sku' => $product->sku,
'type' => $product->type,
'name' => $product->name,
'qty_invoiced' => 1,
'base_total_invoiced' => $product->price,
]);
$orderBillingAddress = OrderAddress::factory()->create([
...Arr::except($cartBillingAddress->toArray(), ['id', 'created_at', 'updated_at']),
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_BILLING,
'order_id' => $order->id,
]);
$orderShippingAddress = OrderAddress::factory()->create([
...Arr::except($cartShippingAddress->toArray(), ['id', 'created_at', 'updated_at']),
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_SHIPPING,
'order_id' => $order->id,
]);
$orderPayment = OrderPayment::factory()->create([
'order_id' => $order->id,
'method' => 'cashondelivery',
]);
$invoice = Invoice::factory()->create([
'order_id' => $order->id,
'state' => 'paid',
'total_qty' => 1,
'base_currency_code' => $order->base_currency_code,
'channel_currency_code' => $order->channel_currency_code,
'order_currency_code' => $order->order_currency_code,
'email_sent' => 1,
'discount_amount' => 0,
'base_discount_amount' => 0,
'sub_total' => $orderItem->base_price,
'base_sub_total' => $orderItem->base_price,
'grand_total' => $orderItem->price,
'base_grand_total' => $orderItem->price,
]);
$invoiceItem = InvoiceItem::factory()->create([
'invoice_id' => $invoice->id,
'order_item_id' => $orderItem->id,
'name' => $orderItem->name,
'sku' => $orderItem->sku,
'qty' => 1,
'price' => $orderItem->price,
'base_price' => $orderItem->base_price,
'total' => $orderItem->price,
'base_total' => $orderItem->base_price,
'tax_amount' => (($orderItem->tax_amount / $orderItem->qty_ordered)),
'base_tax_amount' => (($orderItem->base_tax_amount / $orderItem->qty_ordered)),
'discount_amount' => (($orderItem->discount_amount / $orderItem->qty_ordered)),
'base_discount_amount' => (($orderItem->base_discount_amount / $orderItem->qty_ordered)),
'product_id' => $orderItem->product_id,
'product_type' => $orderItem->product_type,
'additional' => $orderItem->additional,
]);
$orderTransaction = OrderTransaction::factory()->create([
'transaction_id' => md5(uniqid()),
'type' => 'cashondelivery',
'payment_method' => 'cashondelivery',
'status' => 'paid',
'status' => $invoice->state,
'order_id' => $invoice->order->id,
'invoice_id' => $invoice->id,
'amount' => $invoice->grand_total,
]);
// Act and Assert.
$this->loginAsAdmin();
$response = get(route('admin.reporting.sales.stats', [
'start' => Carbon::now()->copy()->subMonth(),
'type' => 'average-sales',
'end' => Carbon::now()->addMonths(5),
]))
->assertOk()
->assertJsonPath('statistics.sales.progress', 100)
->assertJsonPath('statistics.sales.formatted_total', core()->formatBasePrice($order->grand_total))
->assertJsonPath('statistics.over_time.current.30.count', 1);
$this->assertPrice($order->grand_total, $response->json('statistics.over_time.current.30.total'));
$cart->refresh();
$cartItem->refresh();
$cartBillingAddress->refresh();
$cartShippingAddress->refresh();
$orderBillingAddress->refresh();
$orderShippingAddress->refresh();
$order->refresh();
$orderItem->refresh();
$invoiceItem->refresh();
$orderTransaction->refresh();
$this->assertModelWise([
Cart::class => [
$this->prepareCart($cart),
],
CartItem::class => [
$this->prepareCartItem($cartItem),
],
CartPayment::class => [
$this->prepareCartPayment($cartPayment),
],
CartAddress::class => [
$this->prepareAddress($cartBillingAddress),
],
CartAddress::class => [
$this->prepareAddress($cartShippingAddress),
],
CartShippingRate::class => [
$this->prepareCartShippingRate($cartShippingRate),
],
CustomerAddress::class => [
$this->prepareAddress($customerAddress),
],
Order::class => [
$this->prepareOrder($order),
],
OrderItem::class => [
$this->prepareOrderItem($orderItem),
],
OrderAddress::class => [
$this->prepareAddress($orderBillingAddress),
$this->prepareAddress($orderShippingAddress),
],
OrderPayment::class => [
$this->prepareOrderPayment($orderPayment),
],
Invoice::class => [
$this->prepareInvoice($order, $orderItem),
],
InvoiceItem::class => [
$this->prepareInvoiceItem($invoiceItem),
],
]);
});
it('should returns the shipping collected stats', function () {
// Arrange.
$product = (new ProductFaker([
'attributes' => [
5 => 'new',
],
'attribute_value' => [
'new' => [
'boolean_value' => true,
],
],
]))
->getSimpleProductFactory()
->create();
$customer = Customer::factory()->create();
$cart = Cart::factory()->create([
'customer_id' => $customer->id,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'customer_email' => $customer->email,
'is_guest' => 0,
]);
$additional = [
'product_id' => $product->id,
'rating' => '0',
'is_buy_now' => '0',
'quantity' => '1',
];
$cartItem = CartItem::factory()->create([
'cart_id' => $cart->id,
'product_id' => $product->id,
'sku' => $product->sku,
'quantity' => $additional['quantity'],
'name' => $product->name,
'price' => $convertedPrice = core()->convertPrice($price = $product->price),
'base_price' => $price,
'total' => $convertedPrice * $additional['quantity'],
'base_total' => $price * $additional['quantity'],
'weight' => $product->weight ?? 0,
'total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'base_total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'type' => $product->type,
'additional' => $additional,
]);
$customerAddress = CustomerAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CustomerAddress::ADDRESS_TYPE,
]);
$cartBillingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_BILLING,
]);
$cartShippingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_SHIPPING,
]);
$cartPayment = CartPayment::factory()->create([
'cart_id' => $cart->id,
'method' => $paymentMethod = 'cashondelivery',
'method_title' => core()->getConfigData('sales.payment_methods.'.$paymentMethod.'.title'),
]);
$cartShippingRate = CartShippingRate::factory()->create([
'carrier' => 'free',
'carrier_title' => 'Free shipping',
'method' => 'free_free',
'method_title' => 'Free Shipping',
'method_description' => 'Free Shipping',
'cart_address_id' => $cartShippingAddress->id,
]);
$order = Order::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'customer_email' => $customer->email,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'status' => 'processing',
'sub_total_invoiced' => $product->price,
'base_sub_total_invoiced' => $product->price,
]);
$orderItem = OrderItem::factory()->create([
'product_id' => $product->id,
'order_id' => $order->id,
'sku' => $product->sku,
'type' => $product->type,
'name' => $product->name,
'qty_invoiced' => 1,
'base_total_invoiced' => $product->price,
]);
$orderBillingAddress = OrderAddress::factory()->create([
...Arr::except($cartBillingAddress->toArray(), ['id', 'created_at', 'updated_at']),
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_BILLING,
'order_id' => $order->id,
]);
$orderShippingAddress = OrderAddress::factory()->create([
...Arr::except($cartShippingAddress->toArray(), ['id', 'created_at', 'updated_at']),
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_SHIPPING,
'order_id' => $order->id,
]);
$orderPayment = OrderPayment::factory()->create([
'order_id' => $order->id,
'method' => 'cashondelivery',
]);
$invoice = Invoice::factory()->create([
'order_id' => $order->id,
'state' => 'paid',
'total_qty' => 1,
'base_currency_code' => $order->base_currency_code,
'channel_currency_code' => $order->channel_currency_code,
'order_currency_code' => $order->order_currency_code,
'email_sent' => 1,
'discount_amount' => 0,
'base_discount_amount' => 0,
'sub_total' => $orderItem->base_price,
'base_sub_total' => $orderItem->base_price,
'grand_total' => $orderItem->price,
'base_grand_total' => $orderItem->price,
]);
$invoiceItem = InvoiceItem::factory()->create([
'invoice_id' => $invoice->id,
'order_item_id' => $orderItem->id,
'name' => $orderItem->name,
'sku' => $orderItem->sku,
'qty' => 1,
'price' => $orderItem->price,
'base_price' => $orderItem->base_price,
'total' => $orderItem->price,
'base_total' => $orderItem->base_price,
'tax_amount' => (($orderItem->tax_amount / $orderItem->qty_ordered)),
'base_tax_amount' => (($orderItem->base_tax_amount / $orderItem->qty_ordered)),
'discount_amount' => (($orderItem->discount_amount / $orderItem->qty_ordered)),
'base_discount_amount' => (($orderItem->base_discount_amount / $orderItem->qty_ordered)),
'product_id' => $orderItem->product_id,
'product_type' => $orderItem->product_type,
'additional' => $orderItem->additional,
]);
$orderTransaction = OrderTransaction::factory()->create([
'transaction_id' => md5(uniqid()),
'type' => 'cashondelivery',
'payment_method' => 'cashondelivery',
'status' => 'paid',
'status' => $invoice->state,
'order_id' => $invoice->order->id,
'invoice_id' => $invoice->id,
'amount' => $invoice->grand_total,
]);
// Act and Assert.
$this->loginAsAdmin();
get(route('admin.reporting.sales.stats', [
'start' => Carbon::now()->copy()->subMonth(),
'type' => 'shipping-collected',
'end' => Carbon::now()->addMonths(5),
]))
->assertOk()
->assertJsonPath('statistics.top_methods.0.title', 'Free Shipping');
$cart->refresh();
$cartItem->refresh();
$cartBillingAddress->refresh();
$cartShippingAddress->refresh();
$orderBillingAddress->refresh();
$orderShippingAddress->refresh();
$order->refresh();
$orderItem->refresh();
$invoiceItem->refresh();
$orderTransaction->refresh();
$this->assertModelWise([
Cart::class => [
$this->prepareCart($cart),
],
CartItem::class => [
$this->prepareCartItem($cartItem),
],
CartPayment::class => [
$this->prepareCartPayment($cartPayment),
],
CartAddress::class => [
$this->prepareAddress($cartBillingAddress),
],
CartAddress::class => [
$this->prepareAddress($cartShippingAddress),
],
CartShippingRate::class => [
$this->prepareCartShippingRate($cartShippingRate),
],
CustomerAddress::class => [
$this->prepareAddress($customerAddress),
],
Order::class => [
$this->prepareOrder($order),
],
OrderItem::class => [
$this->prepareOrderItem($orderItem),
],
OrderAddress::class => [
$this->prepareAddress($orderBillingAddress),
$this->prepareAddress($orderShippingAddress),
],
OrderPayment::class => [
$this->prepareOrderPayment($orderPayment),
],
Invoice::class => [
$this->prepareInvoice($order, $orderItem),
],
InvoiceItem::class => [
$this->prepareInvoiceItem($invoiceItem),
],
]);
});
it('should returns the tax collected stats', function () {
// Arrange.
$product = (new ProductFaker([
'attributes' => [
5 => 'new',
],
'attribute_value' => [
'new' => [
'boolean_value' => true,
],
],
]))
->getSimpleProductFactory()
->create();
$customer = Customer::factory()->create();
$cart = Cart::factory()->create([
'customer_id' => $customer->id,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'customer_email' => $customer->email,
'is_guest' => 0,
]);
$additional = [
'product_id' => $product->id,
'rating' => '0',
'is_buy_now' => '0',
'quantity' => '1',
];
$cartItem = CartItem::factory()->create([
'cart_id' => $cart->id,
'product_id' => $product->id,
'sku' => $product->sku,
'quantity' => $additional['quantity'],
'name' => $product->name,
'price' => $convertedPrice = core()->convertPrice($price = $product->price),
'base_price' => $price,
'total' => $convertedPrice * $additional['quantity'],
'base_total' => $price * $additional['quantity'],
'weight' => $product->weight ?? 0,
'total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'base_total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'type' => $product->type,
'additional' => $additional,
]);
$customerAddress = CustomerAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CustomerAddress::ADDRESS_TYPE,
]);
$cartBillingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_BILLING,
]);
$cartShippingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_SHIPPING,
]);
$cartPayment = CartPayment::factory()->create([
'cart_id' => $cart->id,
'method' => $paymentMethod = 'cashondelivery',
'method_title' => core()->getConfigData('sales.payment_methods.'.$paymentMethod.'.title'),
]);
$cartShippingRate = CartShippingRate::factory()->create([
'carrier' => 'free',
'carrier_title' => 'Free shipping',
'method' => 'free_free',
'method_title' => 'Free Shipping',
'method_description' => 'Free Shipping',
'cart_address_id' => $cartShippingAddress->id,
]);
$order = Order::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'customer_email' => $customer->email,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'status' => 'processing',
'sub_total_invoiced' => $product->price,
'base_sub_total_invoiced' => $product->price,
'base_tax_amount_invoiced' => $taxInvoiced = rand(20, 50),
'base_grand_total_refunded' => $grantTotalRefunded = $taxInvoiced - 10,
]);
$orderItem = OrderItem::factory()->create([
'product_id' => $product->id,
'order_id' => $order->id,
'sku' => $product->sku,
'type' => $product->type,
'name' => $product->name,
'qty_invoiced' => 1,
'base_total_invoiced' => $product->price,
]);
$orderBillingAddress = OrderAddress::factory()->create([
...Arr::except($cartBillingAddress->toArray(), ['id', 'created_at', 'updated_at']),
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_BILLING,
'order_id' => $order->id,
]);
$orderShippingAddress = OrderAddress::factory()->create([
...Arr::except($cartShippingAddress->toArray(), ['id', 'created_at', 'updated_at']),
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_SHIPPING,
'order_id' => $order->id,
]);
$orderPayment = OrderPayment::factory()->create([
'order_id' => $order->id,
'method' => 'cashondelivery',
]);
$invoice = Invoice::factory()->create([
'order_id' => $order->id,
'state' => 'paid',
'total_qty' => 1,
'base_currency_code' => $order->base_currency_code,
'channel_currency_code' => $order->channel_currency_code,
'order_currency_code' => $order->order_currency_code,
'email_sent' => 1,
'discount_amount' => 0,
'base_discount_amount' => 0,
'sub_total' => $orderItem->base_price,
'base_sub_total' => $orderItem->base_price,
'grand_total' => $orderItem->price,
'base_grand_total' => $orderItem->price,
]);
$invoiceItem = InvoiceItem::factory()->create([
'invoice_id' => $invoice->id,
'order_item_id' => $orderItem->id,
'name' => $orderItem->name,
'sku' => $orderItem->sku,
'qty' => 1,
'price' => $orderItem->price,
'base_price' => $orderItem->base_price,
'total' => $orderItem->price,
'base_total' => $orderItem->base_price,
'tax_amount' => (($orderItem->tax_amount / $orderItem->qty_ordered)),
'base_tax_amount' => (($orderItem->base_tax_amount / $orderItem->qty_ordered)),
'discount_amount' => (($orderItem->discount_amount / $orderItem->qty_ordered)),
'base_discount_amount' => (($orderItem->base_discount_amount / $orderItem->qty_ordered)),
'product_id' => $orderItem->product_id,
'product_type' => $orderItem->product_type,
'additional' => $orderItem->additional,
]);
$orderTransaction = OrderTransaction::factory()->create([
'transaction_id' => md5(uniqid()),
'type' => 'cashondelivery',
'payment_method' => 'cashondelivery',
'status' => $invoice->state,
'order_id' => $invoice->order->id,
'invoice_id' => $invoice->id,
'amount' => $invoice->grand_total,
]);
// Act and Assert.
$this->loginAsAdmin();
get(route('admin.reporting.sales.stats', [
'start' => Carbon::now()->copy()->subMonth(),
'type' => 'tax-collected',
'end' => Carbon::now()->addMonths(5),
]))
->assertOk()
->assertJsonPath('statistics.tax_collected.current', $taxInvoiced);
$cart->refresh();
$cartItem->refresh();
$cartBillingAddress->refresh();
$cartShippingAddress->refresh();
$orderBillingAddress->refresh();
$orderShippingAddress->refresh();
$order->refresh();
$orderItem->refresh();
$invoiceItem->refresh();
$orderTransaction->refresh();
$this->assertModelWise([
Cart::class => [
$this->prepareCart($cart),
],
CartItem::class => [
$this->prepareCartItem($cartItem),
],
CartPayment::class => [
$this->prepareCartPayment($cartPayment),
],
CartAddress::class => [
$this->prepareAddress($cartBillingAddress),
],
CartAddress::class => [
$this->prepareAddress($cartShippingAddress),
],
CartShippingRate::class => [
$this->prepareCartShippingRate($cartShippingRate),
],
CustomerAddress::class => [
$this->prepareAddress($customerAddress),
],
Order::class => [
$this->prepareOrder($order),
],
OrderItem::class => [
$this->prepareOrderItem($orderItem),
],
OrderAddress::class => [
$this->prepareAddress($orderBillingAddress),
$this->prepareAddress($orderShippingAddress),
],
OrderPayment::class => [
$this->prepareOrderPayment($orderPayment),
],
Invoice::class => [
$this->prepareInvoice($order, $orderItem),
],
InvoiceItem::class => [
$this->prepareInvoiceItem($invoiceItem),
],
]);
});
it('should returns the refunds stats', function () {
// Arrange.
$product = (new ProductFaker([
'attributes' => [
5 => 'new',
],
'attribute_value' => [
'new' => [
'boolean_value' => true,
],
],
]))
->getSimpleProductFactory()
->create();
$customer = Customer::factory()->create();
$cart = Cart::factory()->create([
'customer_id' => $customer->id,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'customer_email' => $customer->email,
'is_guest' => 0,
]);
$additional = [
'product_id' => $product->id,
'rating' => '0',
'is_buy_now' => '0',
'quantity' => '1',
];
$cartItem = CartItem::factory()->create([
'cart_id' => $cart->id,
'product_id' => $product->id,
'sku' => $product->sku,
'quantity' => $additional['quantity'],
'name' => $product->name,
'price' => $convertedPrice = core()->convertPrice($price = $product->price),
'base_price' => $price,
'total' => $convertedPrice * $additional['quantity'],
'base_total' => $price * $additional['quantity'],
'weight' => $product->weight ?? 0,
'total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'base_total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'type' => $product->type,
'additional' => $additional,
]);
$customerAddress = CustomerAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CustomerAddress::ADDRESS_TYPE,
]);
$cartBillingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_BILLING,
]);
$cartShippingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_SHIPPING,
]);
$cartPayment = CartPayment::factory()->create([
'cart_id' => $cart->id,
'method' => $paymentMethod = 'cashondelivery',
'method_title' => core()->getConfigData('sales.payment_methods.'.$paymentMethod.'.title'),
]);
$cartShippingRate = CartShippingRate::factory()->create([
'carrier' => 'free',
'carrier_title' => 'Free shipping',
'method' => 'free_free',
'method_title' => 'Free Shipping',
'method_description' => 'Free Shipping',
'cart_address_id' => $cartShippingAddress->id,
]);
$order = Order::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'customer_email' => $customer->email,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'status' => 'processing',
'sub_total_invoiced' => $product->price,
'base_sub_total_invoiced' => $product->price,
'base_tax_amount_invoiced' => $taxInvoiced = rand(20, 50),
'base_grand_total_refunded' => $grantTotalRefunded = $taxInvoiced - 10,
]);
$orderItem = OrderItem::factory()->create([
'product_id' => $product->id,
'order_id' => $order->id,
'sku' => $product->sku,
'type' => $product->type,
'name' => $product->name,
'qty_invoiced' => 1,
'base_total_invoiced' => $product->price,
]);
$orderBillingAddress = OrderAddress::factory()->create([
...Arr::except($cartBillingAddress->toArray(), ['id', 'created_at', 'updated_at']),
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_BILLING,
'order_id' => $order->id,
]);
$orderShippingAddress = OrderAddress::factory()->create([
...Arr::except($cartShippingAddress->toArray(), ['id', 'created_at', 'updated_at']),
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_SHIPPING,
'order_id' => $order->id,
]);
$orderPayment = OrderPayment::factory()->create([
'order_id' => $order->id,
'method' => 'cashondelivery',
]);
$invoice = Invoice::factory()->create([
'order_id' => $order->id,
'state' => 'paid',
'total_qty' => 1,
'base_currency_code' => $order->base_currency_code,
'channel_currency_code' => $order->channel_currency_code,
'order_currency_code' => $order->order_currency_code,
'email_sent' => 1,
'discount_amount' => 0,
'base_discount_amount' => 0,
'sub_total' => $orderItem->base_price,
'base_sub_total' => $orderItem->base_price,
'grand_total' => $orderItem->price,
'base_grand_total' => $orderItem->price,
]);
$invoiceItem = InvoiceItem::factory()->create([
'invoice_id' => $invoice->id,
'order_item_id' => $orderItem->id,
'name' => $orderItem->name,
'sku' => $orderItem->sku,
'qty' => 1,
'price' => $orderItem->price,
'base_price' => $orderItem->base_price,
'total' => $orderItem->price,
'base_total' => $orderItem->base_price,
'tax_amount' => (($orderItem->tax_amount / $orderItem->qty_ordered)),
'base_tax_amount' => (($orderItem->base_tax_amount / $orderItem->qty_ordered)),
'discount_amount' => (($orderItem->discount_amount / $orderItem->qty_ordered)),
'base_discount_amount' => (($orderItem->base_discount_amount / $orderItem->qty_ordered)),
'product_id' => $orderItem->product_id,
'product_type' => $orderItem->product_type,
'additional' => $orderItem->additional,
]);
$orderTransaction = OrderTransaction::factory()->create([
'transaction_id' => md5(uniqid()),
'type' => 'cashondelivery',
'payment_method' => 'cashondelivery',
'status' => $invoice->state,
'order_id' => $invoice->order->id,
'invoice_id' => $invoice->id,
'amount' => $invoice->grand_total,
]);
// Act and Assert.
$this->loginAsAdmin();
get(route('admin.reporting.sales.stats', [
'start' => Carbon::now()->copy()->subMonth(),
'type' => 'refunds',
'end' => Carbon::now()->addMonths(5),
]))
->assertOk()
->assertJsonPath('statistics.refunds.current', $grantTotalRefunded);
$cart->refresh();
$cartItem->refresh();
$cartBillingAddress->refresh();
$cartShippingAddress->refresh();
$orderBillingAddress->refresh();
$orderShippingAddress->refresh();
$order->refresh();
$orderItem->refresh();
$invoiceItem->refresh();
$orderTransaction->refresh();
$this->assertModelWise([
Cart::class => [
$this->prepareCart($cart),
],
CartItem::class => [
$this->prepareCartItem($cartItem),
],
CartPayment::class => [
$this->prepareCartPayment($cartPayment),
],
CartAddress::class => [
$this->prepareAddress($cartBillingAddress),
],
CartAddress::class => [
$this->prepareAddress($cartShippingAddress),
],
CartShippingRate::class => [
$this->prepareCartShippingRate($cartShippingRate),
],
CustomerAddress::class => [
$this->prepareAddress($customerAddress),
],
Order::class => [
$this->prepareOrder($order),
],
OrderItem::class => [
$this->prepareOrderItem($orderItem),
],
OrderAddress::class => [
$this->prepareAddress($orderBillingAddress),
$this->prepareAddress($orderShippingAddress),
],
OrderPayment::class => [
$this->prepareOrderPayment($orderPayment),
],
Invoice::class => [
$this->prepareInvoice($order, $orderItem),
],
InvoiceItem::class => [
$this->prepareInvoiceItem($invoiceItem),
],
]);
});
it('should returns the top payment methods stats', function () {
// Arrange.
$product = (new ProductFaker([
'attributes' => [
5 => 'new',
],
'attribute_value' => [
'new' => [
'boolean_value' => true,
],
],
]))
->getSimpleProductFactory()
->create();
$customer = Customer::factory()->create();
$cart = Cart::factory()->create([
'customer_id' => $customer->id,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'customer_email' => $customer->email,
'is_guest' => 0,
]);
$additional = [
'product_id' => $product->id,
'rating' => '0',
'is_buy_now' => '0',
'quantity' => '1',
];
$cartItem = CartItem::factory()->create([
'cart_id' => $cart->id,
'product_id' => $product->id,
'sku' => $product->sku,
'quantity' => $additional['quantity'],
'name' => $product->name,
'price' => $convertedPrice = core()->convertPrice($price = $product->price),
'base_price' => $price,
'total' => $convertedPrice * $additional['quantity'],
'base_total' => $price * $additional['quantity'],
'weight' => $product->weight ?? 0,
'total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'base_total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'type' => $product->type,
'additional' => $additional,
]);
$customerAddress = CustomerAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CustomerAddress::ADDRESS_TYPE,
]);
$cartBillingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_BILLING,
]);
$cartShippingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_SHIPPING,
]);
$cartPayment = CartPayment::factory()->create([
'cart_id' => $cart->id,
'method' => $paymentMethod = 'cashondelivery',
'method_title' => core()->getConfigData('sales.payment_methods.'.$paymentMethod.'.title'),
]);
$cartShippingRate = CartShippingRate::factory()->create([
'carrier' => 'free',
'carrier_title' => 'Free shipping',
'method' => 'free_free',
'method_title' => 'Free Shipping',
'method_description' => 'Free Shipping',
'cart_address_id' => $cartShippingAddress->id,
]);
$order = Order::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'customer_email' => $customer->email,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'status' => 'processing',
'sub_total_invoiced' => $product->price,
'base_sub_total_invoiced' => $product->price,
]);
$orderItem = OrderItem::factory()->create([
'product_id' => $product->id,
'order_id' => $order->id,
'sku' => $product->sku,
'type' => $product->type,
'name' => $product->name,
'qty_invoiced' => 1,
'base_total_invoiced' => $product->price,
]);
$orderBillingAddress = OrderAddress::factory()->create([
...Arr::except($cartBillingAddress->toArray(), ['id', 'created_at', 'updated_at']),
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_BILLING,
'order_id' => $order->id,
]);
$orderShippingAddress = OrderAddress::factory()->create([
...Arr::except($cartShippingAddress->toArray(), ['id', 'created_at', 'updated_at']),
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_SHIPPING,
'order_id' => $order->id,
]);
$orderPayment = OrderPayment::factory()->create([
'order_id' => $order->id,
'method' => 'cashondelivery',
]);
$invoice = Invoice::factory()->create([
'order_id' => $order->id,
'state' => 'paid',
'total_qty' => 1,
'base_currency_code' => $order->base_currency_code,
'channel_currency_code' => $order->channel_currency_code,
'order_currency_code' => $order->order_currency_code,
'email_sent' => 1,
'discount_amount' => 0,
'base_discount_amount' => 0,
'sub_total' => $orderItem->base_price,
'base_sub_total' => $orderItem->base_price,
'grand_total' => $orderItem->price,
'base_grand_total' => $orderItem->price,
]);
$invoiceItem = InvoiceItem::factory()->create([
'invoice_id' => $invoice->id,
'order_item_id' => $orderItem->id,
'name' => $orderItem->name,
'sku' => $orderItem->sku,
'qty' => 1,
'price' => $orderItem->price,
'base_price' => $orderItem->base_price,
'total' => $orderItem->price,
'base_total' => $orderItem->base_price,
'tax_amount' => (($orderItem->tax_amount / $orderItem->qty_ordered)),
'base_tax_amount' => (($orderItem->base_tax_amount / $orderItem->qty_ordered)),
'discount_amount' => (($orderItem->discount_amount / $orderItem->qty_ordered)),
'base_discount_amount' => (($orderItem->base_discount_amount / $orderItem->qty_ordered)),
'product_id' => $orderItem->product_id,
'product_type' => $orderItem->product_type,
'additional' => $orderItem->additional,
]);
$orderTransaction = OrderTransaction::factory()->create([
'transaction_id' => md5(uniqid()),
'type' => 'cashondelivery',
'payment_method' => 'cashondelivery',
'status' => $invoice->state,
'order_id' => $invoice->order->id,
'invoice_id' => $invoice->id,
'amount' => $invoice->grand_total,
]);
// Act and Assert.
$this->loginAsAdmin();
get(route('admin.reporting.sales.stats', [
'start' => Carbon::now()->copy()->subMonth(),
'type' => 'top-payment-methods',
'end' => Carbon::now()->addMonths(5),
]))
->assertOk()
->assertJsonPath('statistics.0.method', 'cashondelivery')
->assertJsonPath('statistics.0.title', 'Cash On Delivery');
$cart->refresh();
$cartItem->refresh();
$cartBillingAddress->refresh();
$cartShippingAddress->refresh();
$orderBillingAddress->refresh();
$orderShippingAddress->refresh();
$order->refresh();
$orderItem->refresh();
$invoiceItem->refresh();
$orderTransaction->refresh();
$this->assertModelWise([
Cart::class => [
$this->prepareCart($cart),
],
CartItem::class => [
$this->prepareCartItem($cartItem),
],
CartPayment::class => [
$this->prepareCartPayment($cartPayment),
],
CartAddress::class => [
$this->prepareAddress($cartBillingAddress),
],
CartAddress::class => [
$this->prepareAddress($cartShippingAddress),
],
CartShippingRate::class => [
$this->prepareCartShippingRate($cartShippingRate),
],
CustomerAddress::class => [
$this->prepareAddress($customerAddress),
],
Order::class => [
$this->prepareOrder($order),
],
OrderItem::class => [
$this->prepareOrderItem($orderItem),
],
OrderAddress::class => [
$this->prepareAddress($orderBillingAddress),
$this->prepareAddress($orderShippingAddress),
],
OrderPayment::class => [
$this->prepareOrderPayment($orderPayment),
],
Invoice::class => [
$this->prepareInvoice($order, $orderItem),
],
InvoiceItem::class => [
$this->prepareInvoiceItem($invoiceItem),
],
]);
});
it('should return the view page of sales stats', function () {
// Arrange.
$product = (new ProductFaker([
'attributes' => [
5 => 'new',
],
'attribute_value' => [
'new' => [
'boolean_value' => true,
],
],
]))
->getSimpleProductFactory()
->create();
$customer = Customer::factory()->create();
$cart = Cart::factory()->create([
'customer_id' => $customer->id,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'customer_email' => $customer->email,
'is_guest' => 0,
]);
$additional = [
'product_id' => $product->id,
'rating' => '0',
'is_buy_now' => '0',
'quantity' => '1',
];
$cartItem = CartItem::factory()->create([
'cart_id' => $cart->id,
'product_id' => $product->id,
'sku' => $product->sku,
'quantity' => $additional['quantity'],
'name' => $product->name,
'price' => $convertedPrice = core()->convertPrice($price = $product->price),
'base_price' => $price,
'total' => $convertedPrice * $additional['quantity'],
'base_total' => $price * $additional['quantity'],
'weight' => $product->weight ?? 0,
'total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'base_total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'type' => $product->type,
'additional' => $additional,
]);
$customerAddress = CustomerAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CustomerAddress::ADDRESS_TYPE,
]);
$cartBillingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_BILLING,
]);
$cartShippingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_SHIPPING,
]);
$cartPayment = CartPayment::factory()->create([
'cart_id' => $cart->id,
'method' => $paymentMethod = 'cashondelivery',
'method_title' => core()->getConfigData('sales.payment_methods.'.$paymentMethod.'.title'),
]);
$cartShippingRate = CartShippingRate::factory()->create([
'carrier' => 'free',
'carrier_title' => 'Free shipping',
'method' => 'free_free',
'method_title' => 'Free Shipping',
'method_description' => 'Free Shipping',
'cart_address_id' => $cartShippingAddress->id,
]);
$order = Order::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'customer_email' => $customer->email,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'status' => 'processing',
'sub_total_invoiced' => $product->price,
'base_sub_total_invoiced' => $product->price,
]);
$orderItem = OrderItem::factory()->create([
'product_id' => $product->id,
'order_id' => $order->id,
'sku' => $product->sku,
'type' => $product->type,
'name' => $product->name,
'qty_invoiced' => 1,
'base_total_invoiced' => $product->price,
]);
$orderBillingAddress = OrderAddress::factory()->create([
...Arr::except($cartBillingAddress->toArray(), ['id', 'created_at', 'updated_at']),
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_BILLING,
'order_id' => $order->id,
]);
$orderShippingAddress = OrderAddress::factory()->create([
...Arr::except($cartShippingAddress->toArray(), ['id', 'created_at', 'updated_at']),
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_SHIPPING,
'order_id' => $order->id,
]);
$orderPayment = OrderPayment::factory()->create([
'order_id' => $order->id,
'method' => 'cashondelivery',
]);
$invoice = Invoice::factory()->create([
'order_id' => $order->id,
'state' => 'paid',
'total_qty' => 1,
'base_currency_code' => $order->base_currency_code,
'channel_currency_code' => $order->channel_currency_code,
'order_currency_code' => $order->order_currency_code,
'email_sent' => 1,
'discount_amount' => 0,
'base_discount_amount' => 0,
'sub_total' => $orderItem->base_price,
'base_sub_total' => $orderItem->base_price,
'grand_total' => $orderItem->price,
'base_grand_total' => $orderItem->price,
]);
$invoiceItem = InvoiceItem::factory()->create([
'invoice_id' => $invoice->id,
'order_item_id' => $orderItem->id,
'name' => $orderItem->name,
'sku' => $orderItem->sku,
'qty' => 1,
'price' => $orderItem->price,
'base_price' => $orderItem->base_price,
'total' => $orderItem->price,
'base_total' => $orderItem->base_price,
'tax_amount' => (($orderItem->tax_amount / $orderItem->qty_ordered)),
'base_tax_amount' => (($orderItem->base_tax_amount / $orderItem->qty_ordered)),
'discount_amount' => (($orderItem->discount_amount / $orderItem->qty_ordered)),
'base_discount_amount' => (($orderItem->base_discount_amount / $orderItem->qty_ordered)),
'product_id' => $orderItem->product_id,
'product_type' => $orderItem->product_type,
'additional' => $orderItem->additional,
]);
$orderTransaction = OrderTransaction::factory()->create([
'transaction_id' => md5(uniqid()),
'type' => 'cashondelivery',
'payment_method' => 'cashondelivery',
'status' => $invoice->state,
'order_id' => $invoice->order->id,
'invoice_id' => $invoice->id,
'amount' => $invoice->grand_total,
]);
// Act and Assert.
$this->loginAsAdmin();
get(route('admin.reporting.sales.view', [
'type' => 'total-sales',
]))
->assertOk()
->assertSeeText(trans('admin::app.reporting.sales.index.total-sales'));
$cart->refresh();
$cartItem->refresh();
$cartBillingAddress->refresh();
$cartShippingAddress->refresh();
$orderBillingAddress->refresh();
$orderShippingAddress->refresh();
$order->refresh();
$orderItem->refresh();
$invoiceItem->refresh();
$orderTransaction->refresh();
$this->assertModelWise([
Cart::class => [
$this->prepareCart($cart),
],
CartItem::class => [
$this->prepareCartItem($cartItem),
],
CartPayment::class => [
$this->prepareCartPayment($cartPayment),
],
CartAddress::class => [
$this->prepareAddress($cartBillingAddress),
],
CartAddress::class => [
$this->prepareAddress($cartShippingAddress),
],
CartShippingRate::class => [
$this->prepareCartShippingRate($cartShippingRate),
],
CustomerAddress::class => [
$this->prepareAddress($customerAddress),
],
Order::class => [
$this->prepareOrder($order),
],
OrderItem::class => [
$this->prepareOrderItem($orderItem),
],
OrderAddress::class => [
$this->prepareAddress($orderBillingAddress),
$this->prepareAddress($orderShippingAddress),
],
OrderPayment::class => [
$this->prepareOrderPayment($orderPayment),
],
Invoice::class => [
$this->prepareInvoice($order, $orderItem),
],
InvoiceItem::class => [
$this->prepareInvoiceItem($invoiceItem),
],
]);
});
it('should export the sales stats', function () {
// Arrange.
$product = (new ProductFaker([
'attributes' => [
5 => 'new',
],
'attribute_value' => [
'new' => [
'boolean_value' => true,
],
],
]))
->getSimpleProductFactory()
->create();
$customer = Customer::factory()->create();
$cart = Cart::factory()->create([
'customer_id' => $customer->id,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'customer_email' => $customer->email,
'is_guest' => 0,
]);
$customer = Customer::factory()->create();
$cart = Cart::factory()->create([
'customer_id' => $customer->id,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'customer_email' => $customer->email,
'is_guest' => 0,
]);
$additional = [
'product_id' => $product->id,
'rating' => '0',
'is_buy_now' => '0',
'quantity' => '1',
];
$cartItem = CartItem::factory()->create([
'cart_id' => $cart->id,
'product_id' => $product->id,
'sku' => $product->sku,
'quantity' => $additional['quantity'],
'name' => $product->name,
'price' => $convertedPrice = core()->convertPrice($price = $product->price),
'base_price' => $price,
'total' => $convertedPrice * $additional['quantity'],
'base_total' => $price * $additional['quantity'],
'weight' => $product->weight ?? 0,
'total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'base_total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'type' => $product->type,
'additional' => $additional,
]);
$customerAddress = CustomerAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CustomerAddress::ADDRESS_TYPE,
]);
$cartBillingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_BILLING,
]);
$cartShippingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_SHIPPING,
]);
$cartPayment = CartPayment::factory()->create([
'cart_id' => $cart->id,
'method' => $paymentMethod = 'cashondelivery',
'method_title' => core()->getConfigData('sales.payment_methods.'.$paymentMethod.'.title'),
]);
$cartShippingRate = CartShippingRate::factory()->create([
'carrier' => 'free',
'carrier_title' => 'Free shipping',
'method' => 'free_free',
'method_title' => 'Free Shipping',
'method_description' => 'Free Shipping',
'cart_address_id' => $cartShippingAddress->id,
]);
$order = Order::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'customer_email' => $customer->email,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
]);
$orderItem = OrderItem::factory()->create([
'product_id' => $product->id,
'order_id' => $order->id,
'sku' => $product->sku,
'type' => $product->type,
'name' => $product->name,
]);
$orderBillingAddress = OrderAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_BILLING,
]);
$orderShippingAddress = OrderAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_SHIPPING,
]);
$orderPayment = OrderPayment::factory()->create([
'order_id' => $order->id,
]);
// Act and Assert.
$this->loginAsAdmin();
$period = fake()->randomElement(['day', 'month', 'year']);
$start = Carbon::now();
if ($period === 'day') {
$end = $start->copy()->addDay();
} elseif ($period === 'month') {
$end = $start->copy()->addMonth();
} else {
$end = $start->copy()->addYear();
}
get(route('admin.reporting.sales.export', [
'start' => $start->toDateString(),
'end' => $end->toDateString(),
'format' => $format = fake()->randomElement(['csv', 'xls']),
'period' => $period,
'type' => 'total-sales',
]))
->assertOk()
->assertDownload('total-sales.'.$format);
$cart->refresh();
$cartItem->refresh();
$cartBillingAddress->refresh();
$cartShippingAddress->refresh();
$orderBillingAddress->refresh();
$orderShippingAddress->refresh();
$order->refresh();
$orderItem->refresh();
$this->assertModelWise([
Cart::class => [
$this->prepareCart($cart),
],
CartItem::class => [
$this->prepareCartItem($cartItem),
],
CartPayment::class => [
$this->prepareCartPayment($cartPayment),
],
CartAddress::class => [
$this->prepareAddress($cartBillingAddress),
],
CartAddress::class => [
$this->prepareAddress($cartShippingAddress),
],
CartShippingRate::class => [
$this->prepareCartShippingRate($cartShippingRate),
],
CustomerAddress::class => [
$this->prepareAddress($customerAddress),
],
Order::class => [
$this->prepareOrder($order),
],
OrderItem::class => [
$this->prepareOrderItem($orderItem),
],
OrderAddress::class => [
$this->prepareAddress($orderBillingAddress),
$this->prepareAddress($orderShippingAddress),
],
OrderPayment::class => [
$this->prepareOrderPayment($orderPayment),
],
]);
});
Function Calls
None |
Stats
MD5 | 632c7601b6580c04f9bc6b849d327e30 |
Eval Count | 0 |
Decode Time | 88 ms |