From 977084351a1b7c9b547746a4c5ab1ed359742913 Mon Sep 17 00:00:00 2001 From: ashif laravel Date: Fri, 13 Feb 2026 12:00:51 +0530 Subject: [PATCH] Add Invoice download url key --- .../GraphQL-API.postman_collection.json | 8 ++--- src/Queries/Shop/Customer/InvoiceQuery.php | 33 ++++++++++++++++++- .../admin/sales/invoices/invoice.graphql | 1 + 3 files changed, 37 insertions(+), 5 deletions(-) diff --git a/Postman_APIs/Collections/GraphQL-API.postman_collection.json b/Postman_APIs/Collections/GraphQL-API.postman_collection.json index d593ef36..3f2bea27 100644 --- a/Postman_APIs/Collections/GraphQL-API.postman_collection.json +++ b/Postman_APIs/Collections/GraphQL-API.postman_collection.json @@ -1,9 +1,9 @@ { "info": { - "_postman_id": "41c0ab89-c463-4f2a-a058-43d43d2be42b", + "_postman_id": "a7e5e4b9-c638-41da-9d8a-e4acfc534b96", "name": "GraphQL-API", "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json", - "_exporter_id": "28306673" + "_exporter_id": "47812092" }, "item": [ { @@ -705,7 +705,7 @@ "body": { "mode": "graphql", "graphql": { - "query": "query invoice {\n invoice(id: 48) {\n id\n incrementId\n state\n emailSent\n totalQty\n baseCurrencyCode\n channelCurrencyCode\n orderCurrencyCode\n subTotal\n baseSubTotal\n grandTotal\n baseGrandTotal\n shippingAmount\n baseShippingAmount\n taxAmount\n baseTaxAmount\n discountAmount\n baseDiscountAmount\n shippingTaxAmount\n baseShippingTaxAmount\n subTotalInclTax\n baseSubTotalInclTax\n shippingAmountInclTax\n baseShippingAmountInclTax\n orderId\n transactionId\n reminders\n nextReminderAt\n createdAt\n updatedAt\n items {\n id\n parentId\n name\n description\n sku\n qty\n price\n basePrice\n total\n baseTotal\n taxAmount\n baseTaxAmount\n discountPercent\n discountAmount\n baseDiscountAmount\n priceInclTax\n basePriceInclTax\n totalInclTax\n baseTotalInclTax\n productId\n productType\n orderItemId\n invoiceId\n additional\n createdAt\n updatedAt\n formattedPrice {\n price\n basePrice\n total\n baseTotal\n taxAmount\n baseTaxAmount\n grandTotal\n baseGrandTotal\n priceInclTax\n basePriceInclTax\n totalInclTax\n baseTotalInclTax\n }\n }\n formattedPrice {\n subTotal\n baseSubTotal\n grandTotal\n baseGrandTotal\n shippingAmount\n baseShippingAmount\n taxAmount\n baseTaxAmount\n discountAmount\n baseDiscountAmount\n shippingTaxAmount\n baseShippingTaxAmount\n subTotalInclTax\n baseSubTotalInclTax\n shippingAmountInclTax\n baseShippingAmountInclTax\n }\n }\n}", + "query": "query invoice {\n invoice(id: 48) {\n id\n incrementId\n state\n emailSent\n invoiceUrl\n totalQty\n baseCurrencyCode\n channelCurrencyCode\n orderCurrencyCode\n subTotal\n baseSubTotal\n grandTotal\n baseGrandTotal\n shippingAmount\n baseShippingAmount\n taxAmount\n baseTaxAmount\n discountAmount\n baseDiscountAmount\n shippingTaxAmount\n baseShippingTaxAmount\n subTotalInclTax\n baseSubTotalInclTax\n shippingAmountInclTax\n baseShippingAmountInclTax\n orderId\n transactionId\n reminders\n nextReminderAt\n createdAt\n updatedAt\n items {\n id\n parentId\n name\n description\n sku\n qty\n price\n basePrice\n total\n baseTotal\n taxAmount\n baseTaxAmount\n discountPercent\n discountAmount\n baseDiscountAmount\n priceInclTax\n basePriceInclTax\n totalInclTax\n baseTotalInclTax\n productId\n productType\n orderItemId\n invoiceId\n additional\n createdAt\n updatedAt\n formattedPrice {\n price\n basePrice\n total\n baseTotal\n taxAmount\n baseTaxAmount\n grandTotal\n baseGrandTotal\n priceInclTax\n basePriceInclTax\n totalInclTax\n baseTotalInclTax\n }\n }\n formattedPrice {\n subTotal\n baseSubTotal\n grandTotal\n baseGrandTotal\n shippingAmount\n baseShippingAmount\n taxAmount\n baseTaxAmount\n discountAmount\n baseDiscountAmount\n shippingTaxAmount\n baseShippingTaxAmount\n subTotalInclTax\n baseSubTotalInclTax\n shippingAmountInclTax\n baseShippingAmountInclTax\n }\n }\n}", "variables": "" } }, @@ -9650,7 +9650,7 @@ "body": { "mode": "graphql", "graphql": { - "query": "query viewInvoice {\n viewInvoice (id: 48) {\n id\n incrementId\n state\n emailSent\n totalQty\n baseCurrencyCode\n channelCurrencyCode\n orderCurrencyCode\n subTotal\n baseSubTotal\n grandTotal\n baseGrandTotal\n shippingAmount\n baseShippingAmount\n taxAmount\n baseTaxAmount\n discountAmount\n baseDiscountAmount\n shippingTaxAmount\n baseShippingTaxAmount\n subTotalInclTax\n baseSubTotalInclTax\n shippingAmountInclTax\n baseShippingAmountInclTax\n orderId\n createdAt\n updatedAt\n transactionId\n items {\n id\n sku\n name\n description\n qty\n price\n basePrice\n total\n baseTotal\n taxAmount\n baseTaxAmount\n productId\n productType\n orderItemId\n invoiceId\n parentId\n additional\n discountPercent\n discountAmount\n baseDiscountAmount\n priceInclTax\n basePriceInclTax\n totalInclTax\n baseTotalInclTax\n createdAt\n updatedAt\n orderItem {\n id\n sku\n type\n name\n couponCode\n weight\n totalWeight\n qtyOrdered\n qtyShipped\n qtyInvoiced\n qtyCanceled\n qtyRefunded\n price\n basePrice\n total\n baseTotal\n totalInvoiced\n baseTotalInvoiced\n amountRefunded\n baseAmountRefunded\n discountPercent\n discountAmount\n baseDiscountAmount\n discountInvoiced\n baseDiscountInvoiced\n discountRefunded\n baseDiscountRefunded\n taxPercent\n taxAmount\n baseTaxAmount\n taxAmountInvoiced\n baseTaxAmountInvoiced\n taxAmountRefunded\n baseTaxAmountRefunded\n priceInclTax\n basePriceInclTax\n totalInclTax\n baseTotalInclTax\n productId\n productType\n orderId\n parentId\n additional\n createdAt\n updatedAt\n }\n product {\n id\n type\n attributeFamilyId\n sku\n parentId\n createdAt\n updatedAt\n }\n }\n }\n}", + "query": "query viewInvoice {\n viewInvoice (id: 48) {\n id\n incrementId\n state\n emailSent\n invoiceUrl\n totalQty\n baseCurrencyCode\n channelCurrencyCode\n orderCurrencyCode\n subTotal\n baseSubTotal\n grandTotal\n baseGrandTotal\n shippingAmount\n baseShippingAmount\n taxAmount\n baseTaxAmount\n discountAmount\n baseDiscountAmount\n shippingTaxAmount\n baseShippingTaxAmount\n subTotalInclTax\n baseSubTotalInclTax\n shippingAmountInclTax\n baseShippingAmountInclTax\n orderId\n createdAt\n updatedAt\n transactionId\n items {\n id\n sku\n name\n description\n qty\n price\n basePrice\n total\n baseTotal\n taxAmount\n baseTaxAmount\n productId\n productType\n orderItemId\n invoiceId\n parentId\n additional\n discountPercent\n discountAmount\n baseDiscountAmount\n priceInclTax\n basePriceInclTax\n totalInclTax\n baseTotalInclTax\n createdAt\n updatedAt\n orderItem {\n id\n sku\n type\n name\n couponCode\n weight\n totalWeight\n qtyOrdered\n qtyShipped\n qtyInvoiced\n qtyCanceled\n qtyRefunded\n price\n basePrice\n total\n baseTotal\n totalInvoiced\n baseTotalInvoiced\n amountRefunded\n baseAmountRefunded\n discountPercent\n discountAmount\n baseDiscountAmount\n discountInvoiced\n baseDiscountInvoiced\n discountRefunded\n baseDiscountRefunded\n taxPercent\n taxAmount\n baseTaxAmount\n taxAmountInvoiced\n baseTaxAmountInvoiced\n taxAmountRefunded\n baseTaxAmountRefunded\n priceInclTax\n basePriceInclTax\n totalInclTax\n baseTotalInclTax\n productId\n productType\n orderId\n parentId\n additional\n createdAt\n updatedAt\n }\n product {\n id\n type\n attributeFamilyId\n sku\n parentId\n createdAt\n updatedAt\n }\n }\n }\n}", "variables": "" } }, diff --git a/src/Queries/Shop/Customer/InvoiceQuery.php b/src/Queries/Shop/Customer/InvoiceQuery.php index 794bb28d..19e5a3ae 100755 --- a/src/Queries/Shop/Customer/InvoiceQuery.php +++ b/src/Queries/Shop/Customer/InvoiceQuery.php @@ -4,9 +4,18 @@ use Illuminate\Database\Eloquent\Builder; use Illuminate\Support\Arr; +use Illuminate\Support\Facades\URL; +use Webkul\Sales\Repositories\InvoiceRepository; class InvoiceQuery { + /** + * Create a new instance. + */ + public function __construct( + protected InvoiceRepository $invoiceRepository + ) {} + /** * Filter query for order invoices. */ @@ -38,4 +47,26 @@ public function getInvoice(Builder $query): Builder $query->where('customer_id', $customer->id); }); } -} + + /** + * Generate URL for invoice PDF download. + */ + public function getInvoiceUrl($invoice): ?string + { + try { + $invoiceModel = $this->invoiceRepository->find($invoice->id); + + if (! $invoiceModel) { + return null; + } + + return URL::signedRoute( + 'shop.customers.account.orders.print-invoice', + ['id' => $invoice->id] + ); + + } catch (\Exception $e) { + return null; + } + } +} \ No newline at end of file diff --git a/src/graphql/admin/sales/invoices/invoice.graphql b/src/graphql/admin/sales/invoices/invoice.graphql index 3718cf9e..f2ff8991 100755 --- a/src/graphql/admin/sales/invoices/invoice.graphql +++ b/src/graphql/admin/sales/invoices/invoice.graphql @@ -72,6 +72,7 @@ type Invoice { incrementId: String @rename(attribute: "increment_id") state: String emailSent: Int @rename(attribute: "email_sent") + invoiceUrl: String @field(resolver: "Webkul\\GraphQLAPI\\Queries\\Shop\\Customer\\InvoiceQuery@getInvoiceUrl") totalQty: Int @rename(attribute: "total_qty") baseCurrencyCode: String @rename(attribute: "base_currency_code") channelCurrencyCode: String @rename(attribute: "channel_currency_code")