public function createInvoice(Buyerable $buyer, Supplier $supplier, array $carts, TransactionShipping $transactionShipping, $note = null, $status = 'unpaid')
 {
     $invoice = new Invoice();
     $invoice->code = $this->generateInvoiceNumber($supplier);
     $invoice->note = $note;
     $invoice->status = $status;
     $invoice->buyer()->associate($buyer);
     $invoice->transaction_shipping()->associate($transactionShipping);
     $invoice->save();
     foreach ($carts as $cart) {
         $product = $cart['product'];
         $invoice->details()->create(['name' => $product->name, 'description' => $product->description, 'quantity' => $cart['quantity'], 'price' => $product->price, 'product_id' => $product->id]);
     }
     return $invoice->load('details');
 }