Explorar el Código

fix: sales master

Muhammad Iqbal Afandi hace 3 años
padre
commit
2cc01a38e5

+ 8
- 3
app/Http/Controllers/SalesController.php Ver fichero

@@ -6,7 +6,6 @@ use App\Http\Requests\Sales\StoreSaleRequest;
6 6
 use App\Http\Requests\Sales\UpdateSaleRequest;
7 7
 use App\Models\Customer;
8 8
 use App\Models\Ppn;
9
-use App\Models\Product;
10 9
 use App\Models\Sale;
11 10
 use App\Models\StockProduct;
12 11
 use Illuminate\Database\QueryException;
@@ -64,9 +63,15 @@ class SalesController extends Controller
64 63
                 fn() => Customer::filter(['search' => request('customer')])
65 64
                     ->get()
66 65
             ),
67
-            'products' => Inertia::lazy(
68
-                fn() => Product::filter(['search' => request('product')])
66
+            'stockProducts' => Inertia::lazy(
67
+                fn() => StockProduct::filter(['search' => request('stockProduct')])
69 68
                     ->get()
69
+                    ->transform(fn($stockProduct) => [
70
+                        'number' => $stockProduct->product_number,
71
+                        'name' => $stockProduct->product->name,
72
+                        'qty' => $stockProduct->qty,
73
+                        'unit' => $stockProduct->product->unit
74
+                    ])
70 75
             )
71 76
         ]);
72 77
     }

+ 15
- 0
app/Models/StockProduct.php Ver fichero

@@ -15,4 +15,19 @@ class StockProduct extends Model
15 15
         'qty',
16 16
         'product_number'
17 17
     ];
18
+
19
+    public function product()
20
+    {
21
+        return $this->belongsTo(Product::class, 'product_number', 'number');
22
+    }
23
+
24
+    public function scopeFilter($query, array $filters)
25
+    {
26
+        $query->when($filters['search'] ?? null, function ($query, $search) {
27
+            $query->whereHas('product', function ($query) use ($search) {
28
+                $query->where('number', 'like', '%' . $search . '%')
29
+                    ->orWhere('name', 'like', '%' . $search . '%');
30
+            });
31
+        });
32
+    }
18 33
 }

+ 3
- 3
public/js/resources_js_pages_Sales_Create_vue.js Ver fichero

@@ -725,7 +725,7 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
725 725
       type: Array,
726 726
       "default": []
727 727
     },
728
-    products: {
728
+    stockProducts: {
729 729
       type: Array,
730 730
       "default": []
731 731
     }
@@ -1964,13 +1964,13 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
1964 1964
             label: "Produk",
1965 1965
             placeholder: "produk",
1966 1966
             field: "name",
1967
-            "refresh-data": "products",
1967
+            "refresh-data": "stockProducts",
1968 1968
             modelValue: $setup.form.product,
1969 1969
             "onUpdate:modelValue": _cache[3] || (_cache[3] = function ($event) {
1970 1970
               return $setup.form.product = $event;
1971 1971
             }),
1972 1972
             error: $setup.form.errors.product_number,
1973
-            suggestions: $props.products
1973
+            suggestions: $props.stockProducts
1974 1974
           }, null, 8
1975 1975
           /* PROPS */
1976 1976
           , ["modelValue", "error", "suggestions"])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_10, [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)($setup["AppInputNumber"], {

+ 1
- 1
public/js/vue.js Ver fichero

@@ -58892,7 +58892,7 @@ module.exports = JSON.parse('{"name":"axios","version":"0.21.4","description":"P
58892 58892
 /******/ 		// This function allow to reference async chunks
58893 58893
 /******/ 		__webpack_require__.u = (chunkId) => {
58894 58894
 /******/ 			// return url for filenames based on template
58895
-/******/ 			return "js/" + chunkId + ".js?id=" + {"node_modules_chart_js_auto_auto_esm_js":"9296b829a7757dee","resources_js_pages_Auth_Login_vue":"be578e085a239e29","resources_js_pages_Customers_Create_vue":"abaff1c86032fcae","resources_js_pages_Customers_Edit_vue":"f1a4e333a99c31c9","resources_js_pages_Customers_Index_vue":"c0c3f38312c2d2c9","resources_js_pages_Customers_config_js":"3e69b9c9add806c6","resources_js_pages_Dashboards_Index_vue":"169709cb2487d435","resources_js_pages_Error_Index_vue":"4119ff1c60260652","resources_js_pages_PPN_Index_vue":"2f8e2992ec6659f2","resources_js_pages_Products_Create_vue":"8ccf815689cc3e57","resources_js_pages_Products_Edit_vue":"beff000cbc64de7a","resources_js_pages_Products_Index_vue":"0cdaeead21afa302","resources_js_pages_Products_config_js":"885a5522b0477687","resources_js_pages_Purchases_Components_Details_vue":"555481fa9ad2bb55","resources_js_pages_Purchases_Components_Dialog_ProductCreate_vue":"817a7620a7ed339e","resources_js_pages_Purchases_Components_Dialog_SupplierCreate_vue":"47234f8cf23670bd","resources_js_pages_Purchases_Create_vue":"2f2cb3769cdb38c7","resources_js_pages_Purchases_Edit_vue":"fc65461b74c755fb","resources_js_pages_Purchases_Index_vue":"023de8bce59a7f62","resources_js_pages_Purchases_config_js":"1231ca1a86b64fe0","resources_js_pages_Sales_Components_Details_vue":"ab6208d2dfc40d03","resources_js_pages_Sales_Components_Dialog_CustomerCreate_vue":"0e45b005d2175423","resources_js_pages_Sales_Create_vue":"493bd3b1567e3832","resources_js_pages_Sales_Edit_vue":"8feb19293450be1a","resources_js_pages_Sales_Index_vue":"1c64f3da4b2cf3bd","resources_js_pages_Sales_config_js":"b0e1bf081e7ceb77","resources_js_pages_StockProducts_Index_vue":"adab1491dd4bbdc3","resources_js_pages_Suppliers_Create_vue":"cc4cadba106e4d6f","resources_js_pages_Suppliers_Edit_vue":"b3e685e95f8c88aa","resources_js_pages_Suppliers_Index_vue":"8164a3c7fed7a6bb","resources_js_pages_Suppliers_config_js":"52e8d25c6bfab54b","resources_js_pages_Users_Create_vue":"3dba09b22200339d","resources_js_pages_Users_Edit_vue":"4872b69d62eda692","resources_js_pages_Users_Index_vue":"befb159bdb05f5db","resources_js_pages_Users_Show_vue":"d36db8c57efef81d","resources_js_pages_Users_config_js":"92384d78612abc88"}[chunkId] + "";
58895
+/******/ 			return "js/" + chunkId + ".js?id=" + {"node_modules_chart_js_auto_auto_esm_js":"9296b829a7757dee","resources_js_pages_Auth_Login_vue":"be578e085a239e29","resources_js_pages_Customers_Create_vue":"abaff1c86032fcae","resources_js_pages_Customers_Edit_vue":"f1a4e333a99c31c9","resources_js_pages_Customers_Index_vue":"c0c3f38312c2d2c9","resources_js_pages_Customers_config_js":"3e69b9c9add806c6","resources_js_pages_Dashboards_Index_vue":"169709cb2487d435","resources_js_pages_Error_Index_vue":"4119ff1c60260652","resources_js_pages_PPN_Index_vue":"2f8e2992ec6659f2","resources_js_pages_Products_Create_vue":"8ccf815689cc3e57","resources_js_pages_Products_Edit_vue":"beff000cbc64de7a","resources_js_pages_Products_Index_vue":"0cdaeead21afa302","resources_js_pages_Products_config_js":"885a5522b0477687","resources_js_pages_Purchases_Components_Details_vue":"555481fa9ad2bb55","resources_js_pages_Purchases_Components_Dialog_ProductCreate_vue":"817a7620a7ed339e","resources_js_pages_Purchases_Components_Dialog_SupplierCreate_vue":"47234f8cf23670bd","resources_js_pages_Purchases_Create_vue":"2f2cb3769cdb38c7","resources_js_pages_Purchases_Edit_vue":"fc65461b74c755fb","resources_js_pages_Purchases_Index_vue":"023de8bce59a7f62","resources_js_pages_Purchases_config_js":"1231ca1a86b64fe0","resources_js_pages_Sales_Components_Details_vue":"ab6208d2dfc40d03","resources_js_pages_Sales_Components_Dialog_CustomerCreate_vue":"0e45b005d2175423","resources_js_pages_Sales_Create_vue":"4406047541e5f0ad","resources_js_pages_Sales_Edit_vue":"8feb19293450be1a","resources_js_pages_Sales_Index_vue":"1c64f3da4b2cf3bd","resources_js_pages_Sales_config_js":"b0e1bf081e7ceb77","resources_js_pages_StockProducts_Index_vue":"adab1491dd4bbdc3","resources_js_pages_Suppliers_Create_vue":"cc4cadba106e4d6f","resources_js_pages_Suppliers_Edit_vue":"b3e685e95f8c88aa","resources_js_pages_Suppliers_Index_vue":"8164a3c7fed7a6bb","resources_js_pages_Suppliers_config_js":"52e8d25c6bfab54b","resources_js_pages_Users_Create_vue":"3dba09b22200339d","resources_js_pages_Users_Edit_vue":"4872b69d62eda692","resources_js_pages_Users_Index_vue":"befb159bdb05f5db","resources_js_pages_Users_Show_vue":"d36db8c57efef81d","resources_js_pages_Users_config_js":"92384d78612abc88"}[chunkId] + "";
58896 58896
 /******/ 		};
58897 58897
 /******/ 	})();
58898 58898
 /******/ 	

+ 3
- 3
resources/js/pages/Sales/Create.vue Ver fichero

@@ -17,7 +17,7 @@ const props = defineProps({
17 17
     type: Array,
18 18
     default: [],
19 19
   },
20
-  products: {
20
+  stockProducts: {
21 21
     type: Array,
22 22
     default: [],
23 23
   },
@@ -142,10 +142,10 @@ const checkBtnSubmit = () => {
142 142
                   label="Produk"
143 143
                   placeholder="produk"
144 144
                   field="name"
145
-                  refresh-data="products"
145
+                  refresh-data="stockProducts"
146 146
                   v-model="form.product"
147 147
                   :error="form.errors.product_number"
148
-                  :suggestions="products"
148
+                  :suggestions="stockProducts"
149 149
                 />
150 150
               </div>
151 151