Subversion Repositories SmartDukaan

Rev

Rev 36532 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
32352 amit.gupta 1
$(function () {
2
    $(document).on('click', ".warehouse-create-purchase-order", function () {
3
        loadCreatePurchase("main-content");
4
    });
32145 tejbeer 5
 
32352 amit.gupta 6
    $(document).on('click', ".warehouse-receive-new-invoice", function () {
7
        loadNewReceiveInvoice("main-content");
8
    });
32145 tejbeer 9
 
32192 tejbeer 10
 
32352 amit.gupta 11
    $(document).on('click', ".warehouse-grn-request", function () {
12
        loadGrnRequest("main-content");
13
    });
32192 tejbeer 14
 
32300 tejbeer 15
 
32352 amit.gupta 16
    $(document).on('click', ".warehouse-debit-note", function () {
17
        loadDebitNote("main-content");
18
    });
32192 tejbeer 19
 
20
 
32352 amit.gupta 21
    $(document).on('click', ".warehouse-invoices", function () {
22
        loadWarehouseInvoices("main-content");
23
    });
32256 tejbeer 24
 
32300 tejbeer 25
 
32352 amit.gupta 26
    $(document).on('click', '.dateWiseInvoices', function () {
32300 tejbeer 27
 
32352 amit.gupta 28
        var startDate = getDatesFromPicker('input[name="invoice-duration"]').startDate;
29
        var endDate = getDatesFromPicker('input[name="invoice-duration"]').endDate
32300 tejbeer 30
 
32352 amit.gupta 31
        var vendorId = $('#vendorId').val();
32300 tejbeer 32
 
34047 tejus.loha 33
        // doGetAjaxRequestHandler(context + "/getWarehouseInvoicesByVendor?vendorId=" + vendorId + "&startDate=" + startDate + "&endDate=" + endDate, function (response) {
34
        // $('.invoicesviewcontainer').html(response);
35
        doGetAjaxRequestHandler(context + "/getWarehouseInvoicesBydateWise?dateWiseInvoices=" + "&startDate=" + startDate + "&endDate=" + endDate, function (response) {
36
            $('.invoicesviewcontainer').html(response);
37
        });
32300 tejbeer 38
 
33737 ranu 39
    });
32300 tejbeer 40
 
33737 ranu 41
    $(document).on('click', '.generateInvoicesExcel', function () {
32300 tejbeer 42
 
33737 ranu 43
        var startDate = getDatesFromPicker('input[name="invoice-duration"]').startDate;
44
        var endDate = getDatesFromPicker('input[name="invoice-duration"]').endDate;
45
        doAjaxGetDownload(context + "/generateDatewiseInvoiceExcel?startDate=" + startDate + "&endDate=" + endDate, "PurchaseInvoicesReport.xlsx");
32352 amit.gupta 46
    });
32300 tejbeer 47
 
48
 
32352 amit.gupta 49
    $(document)
50
        .on(
51
            'input',
52
            '#invoice',
53
            function () {
54
                if (confirm('Document has been selected, Do you want to upload ?')) {
55
                    var fileSelector = $('#invoice')[0];
56
                    if (fileSelector != undefined
57
                        && fileSelector.files[0] != undefined) {
58
                        var url = context + '/document-upload';
32300 tejbeer 59
 
32352 amit.gupta 60
                        console.log(url);
61
                        var file = this.files[0];
62
                        doAjaxUploadRequestHandler(
63
                            url,
64
                            'POST',
65
                            file,
66
                            function (response) {
67
                                console.log(response);
68
                                var documentId = response.response.document_id;
69
                                console.log("documentId : "
70
                                    + documentId);
71
                                localStorage.setItem("invoiceDocument",
72
                                    documentId);
32192 tejbeer 73
 
32295 tejbeer 74
 
32352 amit.gupta 75
                            });
32300 tejbeer 76
 
32352 amit.gupta 77
                    }
78
                } else {
79
                    // Do nothing!
80
                }
81
            });
32192 tejbeer 82
 
32352 amit.gupta 83
    $(document).on('click', ".createReceiveInvoice", function () {
32192 tejbeer 84
 
32352 amit.gupta 85
        var invoiceDate = $('#actualDate').val();
32192 tejbeer 86
 
32352 amit.gupta 87
        var warehouseId = $('#warehouseMap').val();
32192 tejbeer 88
 
32352 amit.gupta 89
        var numItems = $('#numberofItems').val();
32192 tejbeer 90
 
32352 amit.gupta 91
        var supplierId = $('#vendorId').val();
32192 tejbeer 92
 
32352 amit.gupta 93
        var totalValue = $('#totalValue').val();
32192 tejbeer 94
 
32352 amit.gupta 95
        var invoiceNumber = $('#invoiceNumber').val();
32642 raveendra. 96
        //var invoiceDoc  =  $('#invoiceDoc').val();
32192 tejbeer 97
 
34047 tejus.loha 98
        var invoice = $('#invoice').val();
32642 raveendra. 99
        var invoiceDoc = localStorage
100
            .getItem("invoiceDocument");
34047 tejus.loha 101
        console.log(invoiceDoc)
32192 tejbeer 102
 
32629 amit.gupta 103
        if (invoiceDate === "" && warehouseId === "" && numItems === "" && supplierId === "" && totalValue === "" && invoiceNumber === "" && invoiceDoc === "") {
32352 amit.gupta 104
            alert("Field can't be empty");
105
            return false;
106
        }
32192 tejbeer 107
 
32629 amit.gupta 108
        if (invoiceDate === "") {
32638 raveendra. 109
            alert("Please select date");
32629 amit.gupta 110
            return false;
111
        }
34047 tejus.loha 112
        if (supplierId === "") {
113
            alert("Please choose supplier/Vendor");
114
            return false;
115
        }
32638 raveendra. 116
 
117
        if (invoiceNumber === "") {
118
            alert("Please fill Invoice Number.");
119
            return false;
120
        }
32629 amit.gupta 121
        if (warehouseId === "") {
32638 raveendra. 122
            alert("Please choose warehouse");
32629 amit.gupta 123
            return false;
124
        }
125
 
126
        if (numItems === "") {
32638 raveendra. 127
            alert("Please fill number of items.");
32629 amit.gupta 128
            return false;
129
        }
130
        if (totalValue === "") {
32638 raveendra. 131
            alert("Please fill Total Value.");
32629 amit.gupta 132
            return false;
133
        }
32638 raveendra. 134
        console.log('invoice doc', invoiceDoc);
34047 tejus.loha 135
        if (invoiceDoc === "") {
32638 raveendra. 136
            alert("Please upload invoice.");
32629 amit.gupta 137
            return false;
138
        }
32352 amit.gupta 139
        var newReceiveInvoice = {};
32192 tejbeer 140
 
32352 amit.gupta 141
        newReceiveInvoice['invoiceDate'] = invoiceDate;
32629 amit.gupta 142
        newReceiveInvoice['warehouseId'] = warehouseId;
143
        newReceiveInvoice['numItems'] = numItems;
144
        newReceiveInvoice['supplierId'] = supplierId;
145
        newReceiveInvoice['totalValue'] = totalValue;
146
        newReceiveInvoice['invoiceNumber'] = invoiceNumber;
147
        newReceiveInvoice['invoiceDoc'] = invoiceDoc;
32192 tejbeer 148
 
32629 amit.gupta 149
        if (confirm("Are you sure you want to add new Invoice")) {
32192 tejbeer 150
 
32390 amit.gupta 151
            doPostAjaxRequestWithJsonHandler(`${context}/newReceiveInvoice`, JSON
32352 amit.gupta 152
                .stringify(newReceiveInvoice), function (response) {
153
                if (response == 'true') {
32638 raveendra. 154
                    alert("Successfully added");
32352 amit.gupta 155
                    localStorage.removeItem("invoiceDocument");
156
                    loadNewReceiveInvoice("main-content");
157
                }
158
            });
159
        }
32295 tejbeer 160
 
32192 tejbeer 161
 
32352 amit.gupta 162
    });
32192 tejbeer 163
 
164
 
32352 amit.gupta 165
    var purchaseItemIds;
166
    $(document).on('click', ".purchaseorderitemview", function () {
167
        purchaseItemIds = [];
168
        var vendorId = $('#vendorId').val();
169
        var warehouseId = $('#warehouseMap').val();
32390 amit.gupta 170
        var poDate = $('#poDate').val();
32192 tejbeer 171
 
32352 amit.gupta 172
        console.log(warehouseId);
32192 tejbeer 173
 
32352 amit.gupta 174
        if (warehouseId === null && vendorId === "") {
175
            alert("Field can't be empty");
176
            return;
177
        }
32192 tejbeer 178
 
32390 amit.gupta 179
        if (poDate === '') {
180
            alert("PO Date is required");
181
            return;
182
        }
183
 
184
        if (warehouseId === null && vendorId === "") {
185
            alert("Field can't be empty");
186
            return;
187
        }
188
 
32352 amit.gupta 189
        if (warehouseId === null) {
190
            alert("please select warehouse");
191
            return;
192
        }
193
        if (vendorId === "") {
194
            alert("please select vendor");
195
            return;
196
        }
197
        doGetAjaxRequestHandler(context + "/addPurchaseItemView?warehouseId=" + warehouseId + "&vendorId=" + vendorId, function (response) {
198
            $(".createpurchaseordercontainer").html(response);
199
        });
200
    });
32192 tejbeer 201
 
32145 tejbeer 202
 
36532 amit 203
    $(document).on('change', '#poItemsFile', function () {
204
        var file = this.files[0];
205
        if (!file) return;
206
 
207
        var vendorId = $('#vendorId').val();
208
        var poDate = $('#poDate').val();
209
 
210
        var formData = new FormData();
211
        formData.append("file", file);
212
 
213
        $.ajax({
214
            url: context + '/uploadPurchaseOrderItems?vendorId=' + vendorId + '&poDate=' + poDate,
215
            type: 'POST',
216
            data: formData,
217
            dataType: 'json',
218
            cache: false,
219
            contentType: false,
220
            processData: false,
221
            success: function (items) {
222
                // Clear existing rows
223
                $('#purchase-order-table tbody').empty();
224
                purchaseItemIds = [];
225
 
226
                for (var i = 0; i < items.length; i++) {
227
                    var item = items[i];
228
                    var $row = $('<tr>' +
229
                        '<td><input type="text" class="form-control typeaheaditem" autocomplete="off" value="' + item.modelName + '" readonly/></td>' +
230
                        '<td><input type="number" class="form-control qty" name="qty" value="' + item.amendedQty + '"/></td>' +
231
                        '<td><input type="number" class="form-control transferPrice" readonly tabindex="-1" value="' + item.transferPrice + '" data-itemid="' + item.itemId + '"/></td>' +
232
                        '<td><input type="number" class="form-control totalValue" tabindex="-1" readonly value="' + item.totalValue + '"/></td>' +
233
                        '<td><input class="form-control btn btn-primary removeInPurchaseOrder" tabindex="-1" type="button" value="Remove"></td>' +
234
                        '</tr>');
235
                    $('#purchase-order-table tbody').append($row);
236
                    purchaseItemIds.push(item.itemId);
237
                }
238
                updateTotalValue();
239
                alert("Uploaded " + items.length + " items successfully");
240
            },
241
            error: function (xhr) {
242
                var msg = "Upload failed";
243
                try {
244
                    var err = JSON.parse(xhr.responseText);
245
                    if (err.message) msg = err.message;
246
                    if (err.code) msg = err.code;
247
                } catch (e) {}
248
                alert(msg);
249
            }
250
        });
251
 
252
        // Reset file input so same file can be re-uploaded
253
        $(this).val('');
254
    });
255
 
32352 amit.gupta 256
    $(document).on('click', ".addRowInPurchaseOrder", function () {
257
        var totalQty = 0;
33727 ranu 258
        var totalValue = 0;
32145 tejbeer 259
 
32358 amit.gupta 260
        $("table > tbody > tr").each(function () {
32352 amit.gupta 261
            var itemId = $(this).find(".transferPrice").data('itemid');
262
            var qty = $(this).find(".qty").val();
33727 ranu 263
            var transferPrice = $(this).find(".transferPrice").val();
32145 tejbeer 264
 
33727 ranu 265
            if (qty !== undefined && qty !== "") {
266
                qty = parseInt(qty);
267
                totalQty += qty;
268
                if (transferPrice !== undefined && transferPrice !== "") {
269
                    transferPrice = parseFloat(transferPrice);
270
                    totalValue += qty * transferPrice;
271
                }
32352 amit.gupta 272
            }
32358 amit.gupta 273
        });
32145 tejbeer 274
 
32603 raveendra. 275
        var $html = $(`<tr>
33727 ranu 276
        <td><input type="text" class="form-control typeaheaditem" autocomplete="off" placeholder="Search Model"/></td>
277
        <td><input type="number" class="form-control qty" name="qty" placeholder="Quantity"/></td>
278
        <td><input type="number" class="form-control transferPrice" readonly tabindex="-1" placeholder="Transfer Price"/></td>
279
        <td><input type="number" class="form-control totalValue" tabindex="-1" readonly placeholder="Total Value"/></td>
280
        <td><input class="form-control btn btn-primary removeInPurchaseOrder" tabindex="-1" type="button" value="Remove"></td>
281
    </tr>`);
32192 tejbeer 282
 
32352 amit.gupta 283
        var vendorId = $('#vendorId').val();
32192 tejbeer 284
 
32352 amit.gupta 285
        $('tbody').append($html);
33727 ranu 286
        getVendorItemAheadOptions($html.find('.typeaheaditem'), vendorId, function (selectedItem) {
32488 amit.gupta 287
            let poDate = $('#poDate').val();
32352 amit.gupta 288
            var itemId = selectedItem.itemId;
34047 tejus.loha 289
            var description = selectedItem.itemDescription;
290
            if (itemId) {
32488 amit.gupta 291
                doGetAjaxRequestHandler(`${context}/getPricing?vendorId=${vendorId}&itemId=${itemId}&onDate=${poDate}`, function (response) {
32360 amit.gupta 292
                    if (response !== "null") {
34047 tejus.loha 293
                        if (response !== 'false') {
294
                            var jsonObj = JSON.parse(response);
295
                            $html.find('.transferPrice').val(jsonObj.transferPrice);
296
                            $html.find('input.qty').focus();
33727 ranu 297
 
34047 tejus.loha 298
                            // Update the total value for this row
299
                            let qty = $html.find('.qty').val();
300
                            let transferPrice = jsonObj.transferPrice;
301
                            if (qty && transferPrice) {
302
                                let total = qty * transferPrice;
303
                                $html.find('.totalValue').val(total);
304
                                updateTotalValue();
305
                            }
306
                            addItem($html, itemId);
307
                        } else {
308
                            $html.find('.typeaheaditem').val('');
309
                            alert(`Category not Define(eg- HID, SLOW MOVING, FAST MOVING),First define the category of ${description} and Try again`);
33727 ranu 310
                        }
34047 tejus.loha 311
 
32360 amit.gupta 312
                    } else {
34047 tejus.loha 313
                        $html.find('.typeaheaditem').val('');
37072 amit 314
                        alert(`No approved price for ${description} on ${poDate}. Get the vendor pricing approved first, then try again.`);
32360 amit.gupta 315
                    }
316
                });
317
            } else {
32352 amit.gupta 318
                return false;
319
            }
320
        });
33727 ranu 321
    });
32145 tejbeer 322
 
33727 ranu 323
    $(document).on('input', '.qty', function () {
324
        var $row = $(this).closest('tr');
325
        var qty = parseInt($(this).val());
326
        var transferPrice = parseFloat($row.find('.transferPrice').val());
327
        if (!isNaN(qty) && !isNaN(transferPrice)) {
328
            let total = qty * transferPrice;
329
            $row.find('.totalValue').val(total);
330
        }
331
        updateTotalValue();
32352 amit.gupta 332
    });
32145 tejbeer 333
 
33727 ranu 334
    function updateTotalValue() {
335
        var grandTotal = 0;
36520 amit 336
        var totalQty = 0;
33727 ranu 337
        $('tbody > tr').each(function () {
338
            var rowTotal = parseFloat($(this).find('.totalValue').val());
36520 amit 339
            var rowQty = parseInt($(this).find('.qty').val());
33727 ranu 340
            if (!isNaN(rowTotal)) {
341
                grandTotal += rowTotal;
342
            }
36520 amit 343
            if (!isNaN(rowQty)) {
344
                totalQty += rowQty;
345
            }
33727 ranu 346
        });
36520 amit 347
        $('#totalQuantity').text(totalQty);
33727 ranu 348
        $('#grandTotal').text(grandTotal.toFixed(2));
349
    }
350
 
32355 amit.gupta 351
    function addItem(container, itemId) {
32361 amit.gupta 352
        oldItemId = container.find('.transferPrice').data('itemid');
32360 amit.gupta 353
        if (typeof (oldItemId) === "undefined") {
354
            let itemIndex = purchaseItemIds.indexOf(itemId);
355
            if (itemIndex >= 0) {
356
                alert("Item already added");
32376 amit.gupta 357
                container.find('.typeaheaditem').val("");
32360 amit.gupta 358
                return false;
359
            } else {
360
                purchaseItemIds.push(itemId);
32361 amit.gupta 361
                container.find('.transferPrice').data('itemid', itemId);
32360 amit.gupta 362
                $('.addRowInPurchaseOrder').click();
363
            }
32352 amit.gupta 364
        } else {
32360 amit.gupta 365
            if (oldItemId !== itemId) {
366
                let oldIndex = purchaseItemIds.indexOf(oldItemId);
367
                if (oldIndex > -1) {
368
                    purchaseItemIds.splice(oldIndex, 1);
369
                }
370
                purchaseItemIds.push(itemId);
32361 amit.gupta 371
                container.find('.transferPrice').data('itemid', itemId);
32358 amit.gupta 372
            } else {
32360 amit.gupta 373
                return false;
32352 amit.gupta 374
            }
375
        }
32360 amit.gupta 376
        return true;
32352 amit.gupta 377
    }
32145 tejbeer 378
 
33727 ranu 379
 
32352 amit.gupta 380
    $(document).on('click', '.createSendPurchaseOrder', function () {
32145 tejbeer 381
 
32390 amit.gupta 382
        createPO(true);
32145 tejbeer 383
 
32352 amit.gupta 384
    });
32145 tejbeer 385
 
386
 
32352 amit.gupta 387
    $(document).on('click', '.createPurchaseOrder', function () {
32145 tejbeer 388
 
389
 
32390 amit.gupta 390
        createPO(false);
32352 amit.gupta 391
    });
32145 tejbeer 392
 
393
 
32352 amit.gupta 394
    $(document).on('change', '.qty', function () {
32145 tejbeer 395
 
396
 
32352 amit.gupta 397
        var row = $(this).closest("tr");
398
        var qty = $(row).find(".qty").val();
399
        var transferPrice = $(row).find(".transferPrice").val();
32145 tejbeer 400
 
32352 amit.gupta 401
        var totalVal = transferPrice * qty;
32145 tejbeer 402
 
32352 amit.gupta 403
        var totalValue = $(row).find(".totalValue").val(totalVal);
32145 tejbeer 404
 
32352 amit.gupta 405
        var purchaseOrderValue = 0;
32145 tejbeer 406
 
32352 amit.gupta 407
        $("table > tbody > tr").each(function () {
32145 tejbeer 408
 
32352 amit.gupta 409
            var totalValue = $(this).find(".totalValue").val();
32358 amit.gupta 410
            purchaseOrderValue += totalValue;
32145 tejbeer 411
 
32352 amit.gupta 412
        });
32145 tejbeer 413
 
32352 amit.gupta 414
    });
32145 tejbeer 415
 
416
 
32352 amit.gupta 417
    $(document).on('click', '.warehouse-open-purchase-order', function () {
418
        loadOpenPurchase("main-content");
419
    });
32145 tejbeer 420
 
421
 
32352 amit.gupta 422
    $(document).on('click', '.editViewPurchaseOrder', function () {
423
        var purchaseOrderId = $(this).data('poid');
424
        doGetAjaxRequestHandler(context + "/getEditPOByPurchaseId?purchaseId=" + purchaseOrderId, function (response) {
425
            $('#warehouseEditPurchaseContainer .modal-content').html(response);
426
        });
32145 tejbeer 427
 
32352 amit.gupta 428
    });
32145 tejbeer 429
 
32352 amit.gupta 430
    $(document).on('click', '.editPurchaseOrder', function () {
431
        var purchaseOrderId = $(this).data('poid');
32145 tejbeer 432
 
32352 amit.gupta 433
        editPurchase(false, purchaseOrderId);
32145 tejbeer 434
 
32352 amit.gupta 435
    });
32145 tejbeer 436
 
437
 
32352 amit.gupta 438
    $(document).on('click', '.editSendPurchaseOrder', function () {
439
        var purchaseOrderId = $(this).data('poid');
32145 tejbeer 440
 
441
 
32352 amit.gupta 442
        editPurchase(true, purchaseOrderId);
443
    });
32145 tejbeer 444
 
32352 amit.gupta 445
    $(document).on('click', '.closePurchaseOrder', function () {
446
        var purchaseOrderId = $(this).data('poid');
447
        if (confirm("Are you sure you want to close the PO") == true) {
448
            doPostAjaxRequestHandler(context + "/closePuchaseOrder?purchaseId=" + purchaseOrderId,
449
                function (response) {
32145 tejbeer 450
 
32352 amit.gupta 451
                    console.log(response);
452
                    if (response == 'true') {
453
                        alert("successfully closed");
454
                        loadOpenPurchase("main-content")
455
                    }
456
                });
457
        }
458
    });
32145 tejbeer 459
 
460
 
32352 amit.gupta 461
    $(document).on('click', '.warehouse-view-purchase-order', function () {
462
        doGetAjaxRequestHandler(context + "/viewPurchaseOrder", function (response) {
463
            $('#' + 'main-content').html(response);
464
        });
465
    });
32145 tejbeer 466
 
467
 
32352 amit.gupta 468
    $(document).on('click', '.dateWisePo', function () {
32145 tejbeer 469
 
32352 amit.gupta 470
        var startDate = getDatesFromPicker('input[name="duration"]').startDate;
33729 ranu 471
        var endDate = getDatesFromPicker('input[name="duration"]').endDate;
32145 tejbeer 472
 
473
 
32352 amit.gupta 474
        doGetAjaxRequestHandler(context + "/getPurchaseOrders?startDate=" + startDate + "&endDate=" + endDate, function (response) {
475
            $('.purchaseorderviewcontainer').html(response);
32145 tejbeer 476
 
32352 amit.gupta 477
        });
32145 tejbeer 478
 
479
 
32352 amit.gupta 480
    });
32145 tejbeer 481
 
482
 
32352 amit.gupta 483
    $(document).on('click', '.viewPurchaseOrderlineItem', function () {
484
        var purchaseOrderId = $(this).data('poid');
32145 tejbeer 485
 
32352 amit.gupta 486
        doGetAjaxRequestHandler(context + "/getWarehouseLineItemByPurchaseId?purchaseId=" + purchaseOrderId, function (response) {
487
            $('#warehouseLineItem .modal-content').html(response);
32145 tejbeer 488
 
32352 amit.gupta 489
        });
490
    });
32145 tejbeer 491
 
492
 
32352 amit.gupta 493
    $(document).on("click", '.removeInPurchaseOrder', function () {
494
        var row = $(this).closest("tr");
32361 amit.gupta 495
        let itemId = row.find('.transferPrice').data('itemid');
32360 amit.gupta 496
        let itemIndex = purchaseItemIds.indexOf(itemId);
32352 amit.gupta 497
        if (itemIndex > -1) { // only splice array when item is found
498
            purchaseItemIds.splice(itemIndex, 1); // 2nd parameter means remove one item only
499
        }
500
        row.remove();
501
    });
32192 tejbeer 502
 
503
 
32352 amit.gupta 504
    $(document).on('click', ".addRowForInvoiceItem", function () {
32145 tejbeer 505
 
32352 amit.gupta 506
        var numitems = $(this).data("numitems");
507
        var invoiceId = $(this).data("invoiceid");
508
        var invoiceItemIds = [];
32360 amit.gupta 509
        var totalQty = 0;
32145 tejbeer 510
 
32352 amit.gupta 511
        $("#invoice-order-table > tbody > tr").each(function () {
512
            var itemId = $(this).find(".rate").data('itemid');
513
            var qty = $(this).find(".qty").val();
32145 tejbeer 514
 
32360 amit.gupta 515
            if (qty !== undefined) {
516
                totalQty += qty;
32352 amit.gupta 517
            }
32145 tejbeer 518
 
32360 amit.gupta 519
            if (itemId !== undefined) {
520
                invoiceItemIds.push(itemId);
32352 amit.gupta 521
            }
522
        });
32145 tejbeer 523
 
32352 amit.gupta 524
        var $html = $('<tr>  <td>  <input type="text" class="form-control typeaheaditem"   autocomplete="off"  placeholder="Search Model"/> </td>' +
525
            '<td>  <input type="number" class="form-control qty"  name = "qty" placeholder="Quantity"/> </td>' +
32364 amit.gupta 526
            '<td>  <input type="number" class="form-control rate" placeholder="Rate"/> </td>' +
32352 amit.gupta 527
            '<td> <input class="form-control btn btn-primary removeInInvoiceItem" type="button" value="Remove"></td>  </tr> ');
32145 tejbeer 528
 
529
 
32352 amit.gupta 530
        getItemAheadOptions($html.find('.typeaheaditem'), true, function (
531
            selectedItem) {
532
            var itemId = selectedItem.itemId;
533
            if (invoiceItemIds.indexOf(itemId) > -1) {
534
                alert("Item already added");
535
                $html.find('.typeaheaditem').val("")
32145 tejbeer 536
 
32352 amit.gupta 537
                return false;
538
            }
539
            $html.find('.rate').data('itemid', itemId)
32145 tejbeer 540
 
32352 amit.gupta 541
            $html.find('.removeInInvoiceItem').data('invoiceid', invoiceId)
542
            $html.find('.removeInInvoiceItem').data('itemid', itemId)
32145 tejbeer 543
 
32352 amit.gupta 544
        });
32145 tejbeer 545
 
32192 tejbeer 546
 
32352 amit.gupta 547
        if (totalQty < numitems) {
32192 tejbeer 548
 
32352 amit.gupta 549
            $('#invoice-order-table tbody').append($html);
550
        }
32192 tejbeer 551
 
32352 amit.gupta 552
    });
32256 tejbeer 553
 
32192 tejbeer 554
 
32352 amit.gupta 555
    $(document).on('click', '.saveInvoiceDetail', function () {
32192 tejbeer 556
 
32352 amit.gupta 557
        var numItems = $(this).data("numitems");
558
        var invoiceId = $(this).data("invoiceid");
559
        var warehouseId = $(this).data("warehouseid");
560
        var supplierId = $(this).data("supplierid");
561
        getInvoiceItemData(numItems, invoiceId, warehouseId, supplierId, false);
32192 tejbeer 562
 
32352 amit.gupta 563
    });
32192 tejbeer 564
 
565
 
32352 amit.gupta 566
    $(document).on('click', '.validateInvoiceDetail', function () {
567
        var numItems = $(this).data("numitems");
568
        var invoiceId = $(this).data("invoiceid");
569
        var warehouseId = $(this).data("warehouseid");
570
        var supplierId = $(this).data("supplierid");
32192 tejbeer 571
 
32352 amit.gupta 572
        getInvoiceItemData(numItems, invoiceId, warehouseId, supplierId, true);
32192 tejbeer 573
 
32352 amit.gupta 574
    });
32192 tejbeer 575
 
576
 
32352 amit.gupta 577
    $(document).on("click", '.removeInInvoiceItem', function () {
32192 tejbeer 578
 
32352 amit.gupta 579
        var row = $(this).closest("tr");
580
        var invoiceId = $(this).data("invoiceid");
581
        var itemId = $(this).data("itemid");
582
        if (invoiceId != undefined && itemId != undefined) {
583
            doDeleteAjaxRequestHandler(context + "/removeInvoiceItem?invoiceId="
584
                + invoiceId + "&itemId=" + itemId, function (response) {
585
                if (response == "true") {
586
                    alert("Item removed successfully");
32192 tejbeer 587
 
32352 amit.gupta 588
                }
589
            });
590
        }
32192 tejbeer 591
 
32352 amit.gupta 592
        row.remove();
32192 tejbeer 593
 
32352 amit.gupta 594
    });
32192 tejbeer 595
 
596
 
32352 amit.gupta 597
    $(document).on('click', '.purchaseGrn', function () {
32192 tejbeer 598
 
32352 amit.gupta 599
        var grnItemArray = [];
32192 tejbeer 600
 
32352 amit.gupta 601
        var invoiceId = $(this).data("invoiceid");
32192 tejbeer 602
 
32352 amit.gupta 603
        $("#invoice-purchase-validate > tbody > tr").each(function () {
604
            var grnItemJson = {};
32192 tejbeer 605
 
32352 amit.gupta 606
            var itemId = $(this).find(".itemId").text();
607
            var qty = $(this).find(".qty").text();
608
            var poId = $(this).find(".purchaseId").text();
609
            var excessQty = $(this).find(".excessQty").text();
610
            var itemType = $(this).find(".itemType").text();
32192 tejbeer 611
 
32352 amit.gupta 612
            console.log(itemType);
32192 tejbeer 613
 
32352 amit.gupta 614
            if (itemType == "Serialized") {
615
                var serialNumbers = $(this).find(".imeis-to-grn").tagsinput('items');
32366 amit.gupta 616
                grnItemJson['serialNumbers'] = serialNumbers;
32192 tejbeer 617
 
32352 amit.gupta 618
                if (excessQty > 0) {
619
                    var returnSerialNumbers = $(this).find(".imeis-to-grn-return").tagsinput('items');
620
                    grnItemJson['returnSerialNumbers'] = returnSerialNumbers
621
                }
622
            }
32366 amit.gupta 623
            console.log(serialNumbers);
32352 amit.gupta 624
            grnItemJson['itemId'] = itemId;
625
            grnItemJson['serialNumbers'] = serialNumbers
626
            grnItemJson['qty'] = qty
627
            grnItemJson['poId'] = poId
628
            grnItemJson['invoiceId'] = invoiceId
629
            grnItemJson['itemType'] = itemType
630
            grnItemJson['excessQty'] = excessQty
32192 tejbeer 631
 
32352 amit.gupta 632
            grnItemJson['returnSerialNumbers'] = returnSerialNumbers
32192 tejbeer 633
 
32352 amit.gupta 634
            grnItemArray.push(grnItemJson)
32192 tejbeer 635
 
32352 amit.gupta 636
            console.log(grnItemArray)
32192 tejbeer 637
 
32352 amit.gupta 638
        });
32192 tejbeer 639
 
32352 amit.gupta 640
        for (var i = 0; i < grnItemArray.length; i++) {
32366 amit.gupta 641
            var itemType = grnItemArray[i].itemType;
32192 tejbeer 642
 
32352 amit.gupta 643
            if (itemType == "Serialized") {
644
                var excessQty = grnItemArray[i].excessQty
32192 tejbeer 645
 
646
 
32352 amit.gupta 647
                var serialNumbers = grnItemArray[i].serialNumbers.length
648
                var qty = grnItemArray[i].qty
32192 tejbeer 649
 
32352 amit.gupta 650
                if (serialNumbers != qty) {
651
                    alert("serial number is not matched with qty")
652
                    return false;
653
                }
32192 tejbeer 654
 
32352 amit.gupta 655
                if (excessQty > 0) {
32192 tejbeer 656
 
32352 amit.gupta 657
                    var returnSerialNumbers = grnItemArray[i].returnSerialNumbers.length
32192 tejbeer 658
 
32352 amit.gupta 659
                    if (returnSerialNumbers != excessQty) {
660
                        alert("Return serial number is not matched with excess qty")
661
                        return false;
662
                    }
32192 tejbeer 663
 
32352 amit.gupta 664
                }
665
            }
32192 tejbeer 666
 
32352 amit.gupta 667
        }
32192 tejbeer 668
 
669
 
32352 amit.gupta 670
        console.log(JSON.stringify(grnItemArray))
671
        if (confirm("Are you sure you want to grn purchase order") == true) {
32192 tejbeer 672
 
32352 amit.gupta 673
            doPostAjaxRequestWithJsonHandler(context
674
                + "/createGrn", JSON
675
                .stringify(grnItemArray), function (response) {
676
                if (response == 'true') {
677
                    alert("successfully done");
678
                    loadNewReceiveInvoice("main-content");
679
                }
680
            });
681
        }
32192 tejbeer 682
 
683
 
32352 amit.gupta 684
    });
32256 tejbeer 685
 
686
 
32352 amit.gupta 687
    $(document).on('click', '.grnRequest', function () {
32192 tejbeer 688
 
32352 amit.gupta 689
        var grnRequestJson = {};
690
        var grnRequestItemArray = [];
32192 tejbeer 691
 
32352 amit.gupta 692
        var invoiceId = $(this).data("invoiceid");
32192 tejbeer 693
 
694
 
32352 amit.gupta 695
        $("#invoice-purchase-validate > tbody > tr").each(function () {
696
            var grnItemJson = {};
32192 tejbeer 697
 
32352 amit.gupta 698
            var itemId = $.trim($(this).find(".itemId").text());
699
            var poId = $.trim($(this).find(".purchaseId").text());
32192 tejbeer 700
 
32352 amit.gupta 701
            var qty = parseInt($(this).find(".qty").text());
32256 tejbeer 702
 
32352 amit.gupta 703
            var excessQty = parseInt($(this).find(".excessQty").text());
32256 tejbeer 704
 
32352 amit.gupta 705
            var priceMismatch = $.trim($(this).find(".priceMismatch").text());
706
            console.log(priceMismatch)
32256 tejbeer 707
 
708
 
32354 amit.gupta 709
            if (priceMismatch !== "" || excessQty > 0) {
32352 amit.gupta 710
                console.log(typeof priceMismatch)
711
                console.log(excessQty)
712
                grnItemJson['itemId'] = itemId;
713
                grnItemJson['qty'] = qty;
714
                grnItemJson['excessQty'] = excessQty
32376 amit.gupta 715
                if (priceMismatch === '') {
716
                    grnItemJson['mismatch'] = 'QtyMismatch';
717
                } else {
718
                    grnItemJson['mismatch'] = priceMismatch
719
                }
32352 amit.gupta 720
                grnItemJson['poId'] = poId
32192 tejbeer 721
 
32352 amit.gupta 722
                grnRequestItemArray.push(grnItemJson)
723
            }
724
        });
32256 tejbeer 725
 
32352 amit.gupta 726
        console.log(grnRequestItemArray)
32256 tejbeer 727
 
728
 
32352 amit.gupta 729
        grnRequestJson['invoiceId'] = invoiceId;
730
        grnRequestJson['warehousePurchaseModel'] = grnRequestItemArray
32256 tejbeer 731
 
32366 amit.gupta 732
        if (confirm("Are you sure you want to raise grn request")) {
32192 tejbeer 733
 
32352 amit.gupta 734
            doPostAjaxRequestWithJsonHandler(context
735
                + "/grnRequest", JSON
736
                .stringify(grnRequestJson), function (response) {
737
                if (response == 'true') {
738
                    alert("successfully done");
739
                    loadNewReceiveInvoice("main-content");
740
                }
741
            });
742
        }
32192 tejbeer 743
 
744
 
32352 amit.gupta 745
    });
32192 tejbeer 746
 
32256 tejbeer 747
 
32352 amit.gupta 748
    $(document).on('click', '.resolvedPriceMismatchRequest', function () {
749
        var id = $(this).data("id");
32256 tejbeer 750
 
32352 amit.gupta 751
        var invoiceId = $(this).data("invoiceid");
32256 tejbeer 752
 
32352 amit.gupta 753
        var requestId = $(this).data("requestid");
32256 tejbeer 754
 
32352 amit.gupta 755
        var mismatch = $(this).data("mismatch");
32256 tejbeer 756
 
32352 amit.gupta 757
        if (mismatch == "InvoiceMismatch") {
32485 amit.gupta 758
            if (confirm("Are you sure you want to resolve invoice mismatch")) {
32352 amit.gupta 759
                doGetAjaxRequestHandler(context + "/resolvedMismatchRequest?id=" + id, function (response) {
760
                    if (response == 'true') {
761
                        getGrnRequestItems(requestId, invoiceId)
762
                    }
763
                });
32256 tejbeer 764
 
32352 amit.gupta 765
            }
766
        } else if (mismatch == "PoMismatch") {
767
            if (confirm("Are you sure you want to resolve Po Mismatch. Discard the current PoLineItem new Po will generate on the invoice date.") == true) {
32256 tejbeer 768
 
32352 amit.gupta 769
                doGetAjaxRequestHandler(context + "/resolvedMismatchRequest?id=" + id, function (response) {
770
                    if (response == 'true') {
771
                        getGrnRequestItems(requestId, invoiceId)
772
                    }
773
                });
32256 tejbeer 774
 
32352 amit.gupta 775
            }
776
        }
32256 tejbeer 777
 
32352 amit.gupta 778
    });
32256 tejbeer 779
 
780
 
32352 amit.gupta 781
    $(document).on('click', '.resolvedQtyMismatchRequest', function () {
782
        var id = $(this).data("id");
783
        var invoiceId = $(this).data("invoiceid");
784
        var requestId = $(this).data("requestid");
32256 tejbeer 785
 
786
 
32352 amit.gupta 787
        var mismatch = $(this).data("mismatch");
32256 tejbeer 788
 
32352 amit.gupta 789
        var $row = $(this).closest("tr");
790
        var requiredQty = $row.find(".requiredQty").val();
32256 tejbeer 791
 
32352 amit.gupta 792
        console.log(requiredQty);
32256 tejbeer 793
 
32352 amit.gupta 794
        if (mismatch == "QtyMismatch") {
795
            if (confirm("Are you sure you want to resolve qty mismatch") == true) {
32256 tejbeer 796
 
32352 amit.gupta 797
                doGetAjaxRequestHandler(context + "/resolvedMismatchRequest?id=" + id + "&requiredQty=" + requiredQty, function (response) {
798
                    if (response == 'true') {
799
                        getGrnRequestItems(requestId, invoiceId)
800
                    }
801
                });
32256 tejbeer 802
 
32352 amit.gupta 803
            }
804
        }
32256 tejbeer 805
 
32352 amit.gupta 806
    });
32256 tejbeer 807
 
32192 tejbeer 808
 
32145 tejbeer 809
});
810
 
811
function loadCreatePurchase(domId) {
32352 amit.gupta 812
    doGetAjaxRequestHandler(context + "/warehousePurchaseOrder", function (response) {
813
        $('#' + domId).html(response);
814
    });
32145 tejbeer 815
}
816
 
32192 tejbeer 817
 
32145 tejbeer 818
function loadOpenPurchase(domId) {
819
 
32352 amit.gupta 820
    doGetAjaxRequestHandler(context + "/getOpenPurchaseOrder", function (response) {
821
        $('#' + domId).html(response);
822
    });
32145 tejbeer 823
}
824
 
32192 tejbeer 825
function loadNewReceiveInvoice(domId) {
32352 amit.gupta 826
    doGetAjaxRequestHandler(context + "/newReceiveInvoice", function (response) {
827
        $('#' + domId).html(response);
828
    });
32192 tejbeer 829
}
830
 
32256 tejbeer 831
 
832
function loadGrnRequest(domId) {
32352 amit.gupta 833
    doGetAjaxRequestHandler(context + "/grnRequest", function (response) {
834
        $('#' + domId).html(response);
835
    });
32256 tejbeer 836
}
837
 
838
function loadDebitNote(domId) {
32352 amit.gupta 839
    doGetAjaxRequestHandler(context + "/getDebitNote", function (response) {
840
        $('#' + domId).html(response);
841
    });
32256 tejbeer 842
}
843
 
33729 ranu 844
$(document).on('click', '.dateWiseDebitNote', function () {
845
 
846
    var startDate = getDatesFromPicker('input[name="date-duration"]').startDate;
847
    var endDate = getDatesFromPicker('input[name="date-duration"]').endDate;
848
 
849
 
850
    doGetAjaxRequestHandler(context + "/getDateWiseDebitNote?startDate=" + startDate + "&endDate=" + endDate, function (response) {
851
        $('#warehouse-datewise-debitnote-container').html(response);
852
 
853
    });
854
});
855
 
856
$(document).on('click', '.generateVendorDebitNoteExcel', function () {
857
    var startDate = getDatesFromPicker('input[name="date-duration"]').startDate;
858
    var endDate = getDatesFromPicker('input[name="date-duration"]').endDate;
33809 ranu 859
    doAjaxGetDownload(context + "/generateVendorDebitNoteExcel?startDate=" + startDate + "&endDate=" + endDate, "VendorDebitNoteReport.csv");
33729 ranu 860
});
861
 
32300 tejbeer 862
function loadWarehouseInvoices(domId) {
32352 amit.gupta 863
    doGetAjaxRequestHandler(context + "/getWarehouseInvoices", function (response) {
864
        $('#' + domId).html(response);
865
    });
32300 tejbeer 866
}
867
 
32390 amit.gupta 868
function createPO(sendPo) {
32352 amit.gupta 869
    var purchaseOrder = {};
32145 tejbeer 870
 
32352 amit.gupta 871
    var vendorId = $('#vendorId').val();
32145 tejbeer 872
 
32352 amit.gupta 873
    var warehouseId = $('#warehouseMap').val();
32145 tejbeer 874
 
32390 amit.gupta 875
    var poDate = $('#poDate').val();
32145 tejbeer 876
 
32390 amit.gupta 877
 
32352 amit.gupta 878
    var items = []
879
    $("table > tbody > tr").each(function () {
880
        var purchaseOrderJson = {};
32145 tejbeer 881
 
32352 amit.gupta 882
        var itemId = $(this).find(".transferPrice").data('itemid');
883
        var qty = $(this).find(".qty").val();
884
        var transferPrice = $(this).find(".transferPrice").val();
885
        var totalValue = $(this).find(".totalValue").val();
32145 tejbeer 886
 
887
 
32352 amit.gupta 888
        purchaseOrderJson['itemId'] = itemId;
889
        purchaseOrderJson['amendedQty'] = qty
890
        purchaseOrderJson['totalValue'] = totalValue
891
        purchaseOrderJson['transferPrice'] = transferPrice
32145 tejbeer 892
 
32352 amit.gupta 893
        items.push(purchaseOrderJson)
894
    });
32145 tejbeer 895
 
896
 
32352 amit.gupta 897
    for (var i = 0; i < items.length; i++) {
898
        console.log(items[i])
32145 tejbeer 899
 
32352 amit.gupta 900
        var itemId = items[i].itemId
901
        var qty = items[i].amendedQty
902
        var transferPrice = items[i].transferPrice
903
        var totalValue = items[i].totalValue
32145 tejbeer 904
 
32352 amit.gupta 905
        if (itemId === "" && qty === "" && transferPrice === "" && totalValue === "") {
906
            alert("Field can't be empty");
907
            return false;
908
        }
32145 tejbeer 909
 
910
 
32352 amit.gupta 911
        if (itemId === "") {
912
            alert("please select item");
913
            return false;
914
        }
915
        if (qty === "") {
916
            alert("please choose qty");
917
            return false;
918
        }
32145 tejbeer 919
 
32352 amit.gupta 920
        if (transferPrice === "") {
921
            alert("Transfer Price can't be empty");
922
            return false;
923
        }
924
        if (totalValue === "") {
925
            alert("Total value can't be empty");
926
            return false;
927
        }
32145 tejbeer 928
 
32352 amit.gupta 929
        if (qty <= 0) {
930
            alert("Please fill Qty");
931
            return false;
932
        }
32145 tejbeer 933
 
934
 
32352 amit.gupta 935
    }
32261 tejbeer 936
 
32352 amit.gupta 937
    purchaseOrder['vendorId'] = vendorId;
938
    purchaseOrder['warehouseId'] = warehouseId
939
    purchaseOrder['sendPo'] = sendPo
32390 amit.gupta 940
    purchaseOrder['poDate'] = poDate;
32352 amit.gupta 941
    purchaseOrder['items'] = items
32145 tejbeer 942
 
32352 amit.gupta 943
    console.log(purchaseOrder)
32145 tejbeer 944
 
945
 
32352 amit.gupta 946
    if (confirm("Are you sure you want to create purchase order") == true) {
32145 tejbeer 947
 
32352 amit.gupta 948
        doPostAjaxRequestWithJsonHandler(context
949
            + "/createPurchaseOrder", JSON
950
            .stringify(purchaseOrder), function (response) {
951
            if (response == 'true') {
952
                alert("successfully created");
953
                loadCreatePurchase("main-content");
954
            }
955
        });
956
    }
32145 tejbeer 957
 
958
}
959
 
960
 
961
function editPurchase(sendPo, poid) {
32352 amit.gupta 962
    var editpurchaseOrder = {}
963
    var items = []
964
    $("#purchase-edit-lineitem > tbody > tr").each(function () {
965
        var purchaseOrderJson = {};
966
        var itemId = $(this).find("td:eq(0)").text();
32145 tejbeer 967
 
32352 amit.gupta 968
        var qty = $(this).find("td:eq(2)").text();
32145 tejbeer 969
 
32352 amit.gupta 970
        var amendedQty = $(this).find(".editqty").val();
32256 tejbeer 971
 
32352 amit.gupta 972
        var transferPrice = $.trim($(this).find(".transferPrice").html());
32256 tejbeer 973
 
974
 
32352 amit.gupta 975
        purchaseOrderJson['itemId'] = itemId;
976
        purchaseOrderJson['amendedQty'] = parseInt(amendedQty)
977
        purchaseOrderJson['qty'] = parseInt(qty)
978
        purchaseOrderJson['transferPrice'] = transferPrice
32145 tejbeer 979
 
32352 amit.gupta 980
        items.push(purchaseOrderJson)
981
    });
32145 tejbeer 982
 
983
 
32352 amit.gupta 984
    for (var i = 0; i < items.length; i++) {
985
        console.log(items[i])
32145 tejbeer 986
 
32352 amit.gupta 987
        var amendedQty = items[i].amendedQty
988
        var qty = items[i].qty
32145 tejbeer 989
 
32256 tejbeer 990
 
32352 amit.gupta 991
        if (amendedQty === "") {
992
            alert("please choose qty");
993
            return false;
994
        }
32145 tejbeer 995
 
32352 amit.gupta 996
        if (amendedQty < qty) {
997
            alert("Quantity should be greater than existing qty");
998
            return false;
999
        }
32145 tejbeer 1000
 
1001
 
32352 amit.gupta 1002
    }
32145 tejbeer 1003
 
32352 amit.gupta 1004
    editpurchaseOrder['purchaseOrderId'] = poid;
1005
    editpurchaseOrder['sendPo'] = sendPo
1006
    editpurchaseOrder['items'] = items
32145 tejbeer 1007
 
1008
 
32352 amit.gupta 1009
    if (confirm("Are you sure you want to edit purchase order") == true) {
32145 tejbeer 1010
 
32352 amit.gupta 1011
        doPostAjaxRequestWithJsonHandler(context
1012
            + "/editPurchaseOrder", JSON
1013
            .stringify(editpurchaseOrder), function (response) {
1014
            if (response == 'true') {
1015
                alert("successfully created");
1016
                $('#warehouseEditPurchaseContainer').modal('hide');
1017
                $('.modal-backdrop').remove();
32295 tejbeer 1018
 
32352 amit.gupta 1019
                loadOpenPurchase("main-content")
1020
            }
1021
        });
1022
    }
32145 tejbeer 1023
 
1024
}
1025
 
1026
 
32192 tejbeer 1027
function getInvoiceItemData(numItems, invoiceId, warehouseId, supplierId, validate) {
1028
 
32352 amit.gupta 1029
    var invoiceJson = {};
1030
    console.log(numItems)
1031
    var totalQty = 0;
1032
    var invoiceItems = []
1033
    $("#invoice-order-table > tbody > tr").each(function () {
1034
        var invoiceItemJson = {};
1035
        var itemId = $(this).find(".rate").data('itemid');
1036
        var qty = $(this).find(".qty").val();
32192 tejbeer 1037
 
32352 amit.gupta 1038
        if (qty != undefined) {
1039
            totalQty += parseInt(qty)
1040
        }
1041
        var rate = $(this).find(".rate").val();
1042
        invoiceItemJson['itemId'] = itemId;
1043
        invoiceItemJson['qty'] = qty
1044
        invoiceItemJson['rate'] = rate
1045
        invoiceItems.push(invoiceItemJson)
1046
    });
32192 tejbeer 1047
 
1048
 
32352 amit.gupta 1049
    for (var i = 0; i < invoiceItems.length; i++) {
32192 tejbeer 1050
 
32352 amit.gupta 1051
        var itemId = invoiceItems[i].itemId
1052
        var qty = invoiceItems[i].qty
1053
        var rate = invoiceItems[i].rate
1054
        if (itemId === "" && qty === "" && rate === "") {
1055
            alert("Field can't be empty");
1056
            return false;
1057
        }
32192 tejbeer 1058
 
32352 amit.gupta 1059
        if (itemId === "") {
1060
            alert("please select item");
1061
            return false;
1062
        }
1063
        if (qty === "") {
1064
            alert("please choose qty");
1065
            return false;
1066
        }
32192 tejbeer 1067
 
32352 amit.gupta 1068
        if (rate === "") {
1069
            alert("Rate can't be empty");
1070
            return false;
1071
        }
32192 tejbeer 1072
 
32352 amit.gupta 1073
    }
32192 tejbeer 1074
 
32352 amit.gupta 1075
    console.log(totalQty)
32192 tejbeer 1076
 
32352 amit.gupta 1077
    if (totalQty > numItems) {
1078
        alert("Qty Should not be more than  Invoice items");
1079
        return false;
1080
    }
32192 tejbeer 1081
 
32352 amit.gupta 1082
    if (validate) {
32192 tejbeer 1083
 
32352 amit.gupta 1084
        if (totalQty != numItems) {
1085
            alert("Qty Should not match with Invoice items");
1086
            return false;
1087
        }
1088
    }
32192 tejbeer 1089
 
1090
 
32352 amit.gupta 1091
    invoiceJson['invoiceId'] = invoiceId;
1092
    invoiceJson['warehouseId'] = warehouseId;
1093
    invoiceJson['supplierId'] = supplierId;
1094
    invoiceJson['invoiceItems'] = invoiceItems
1095
    if (validate) {
1096
        validateInvoiceItems(invoiceJson);
1097
    } else {
1098
        saveInvoiceItems(invoiceJson)
1099
    }
32192 tejbeer 1100
}
1101
 
1102
 
1103
function saveInvoiceItems(invoiceJson) {
1104
 
1105
 
32352 amit.gupta 1106
    if (confirm("Are you sure you want to save invoice item") == true) {
32192 tejbeer 1107
 
32352 amit.gupta 1108
        doPostAjaxRequestWithJsonHandler(context
1109
            + "/invoiceItemDetail", JSON
1110
            .stringify(invoiceJson), function (response) {
1111
            if (response == 'true') {
1112
                getInvoiceItems(invoiceJson.invoiceId);
1113
            }
1114
        });
1115
    }
32192 tejbeer 1116
 
1117
}
1118
 
1119
 
1120
function validateInvoiceItems(invoiceJson) {
1121
 
1122
 
32352 amit.gupta 1123
    if (confirm("Are you sure you want to validate invoice item") == true) {
32192 tejbeer 1124
 
32352 amit.gupta 1125
        doPostAjaxRequestWithJsonHandler(context
1126
            + "/validateInvoiceItemDetail", JSON
1127
            .stringify(invoiceJson), function (response) {
1128
            $('.invoiceadditemcontainer').html(response);
32192 tejbeer 1129
 
32352 amit.gupta 1130
        });
1131
    }
32192 tejbeer 1132
 
1133
}
1134
 
1135
function getOpenPOFromWarehouse() {
1136
 
32352 amit.gupta 1137
    var warehouseId = $('#warehouseMap').val();
1138
    doGetAjaxRequestHandler(context + "/getOpenPurchaseOrderByWarehouseId?warehouseId=" + warehouseId, function (response) {
1139
        $('#warehouseManagePuchaseContainer').html(response);
1140
    });
32192 tejbeer 1141
 
1142
 
1143
}
1144
 
1145
function getPurchaseLineitem(poId) {
1146
 
1147
 
32352 amit.gupta 1148
    doGetAjaxRequestHandler(context + "/getPurchaseOrderItemByPoId?poId=" + poId, function (response) {
1149
        $('#warehouseManagePuchaseItemContainer').html(response);
1150
        $('#warehousepurchaseitemgrn').hide()
1151
    });
32192 tejbeer 1152
 
1153
 
1154
}
1155
 
1156
 
1157
function getInvoiceItems(invoiceId) {
1158
 
32352 amit.gupta 1159
    doGetAjaxRequestHandler(context + "/getInvoiceItems?invoiceId=" + invoiceId, function (response) {
1160
        $('.invoiceadditemcontainer').html(response);
32192 tejbeer 1161
 
32352 amit.gupta 1162
    });
32192 tejbeer 1163
}
1164
 
1165
 
32256 tejbeer 1166
function getGrnRequestItems(requestId, invoiceId) {
32352 amit.gupta 1167
    doGetAjaxRequestHandler(context + "/grnRequestItem?requestId=" + requestId + "&invoiceId=" + invoiceId, function (response) {
1168
        $('.grnRequestItemContainer').html(response);
32256 tejbeer 1169
 
32352 amit.gupta 1170
    });
32256 tejbeer 1171
}
1172
 
32912 amit.gupta 1173
function removeInvoice(invoiceId) {
34047 tejus.loha 1174
    if (confirm(`Are your sure want to delete invoiceId ${invoiceId}`)) {
32912 amit.gupta 1175
        doGetAjaxRequestHandler(`${context}/removeInvoice?invoiceId=${invoiceId}`, function (response) {
34047 tejus.loha 1176
            $('#open-invoices').DataTable().row("#" + invoiceId).remove().draw();
32912 amit.gupta 1177
            alert("Invoice Removed");
1178
        });
1179
    }
1180
}
32256 tejbeer 1181
 
32912 amit.gupta 1182
function removeGrnRequest(invoiceId) {
34047 tejus.loha 1183
    if (confirm(`Are your sure want to remove grn request for invoiceId ${invoiceId}`)) {
32912 amit.gupta 1184
        doGetAjaxRequestHandler(`${context}/removeGrnRequest?invoiceId=${invoiceId}`, function (response) {
1185
            $('#' + domId).html(response);
1186
            alert("Grn Request Removed");
1187
        });
1188
    }
1189
}
1190
 
1191
 
35806 amit 1192
// ============ GRN Correction ============
1193
 
1194
$(document).on('click', '.warehouse-grn-correction', function () {
1195
    loadGrnCorrection("main-content");
1196
});
1197
 
1198
$(document).on('click', '.warehouse-grn-correction-approval', function () {
1199
    loadGrnCorrectionApproval("main-content");
1200
});
1201
 
1202
$(document).on('click', '.searchCorrectionInvoices', function () {
1203
    var startDate = getDatesFromPicker('input[name="correction-duration"]').startDate;
1204
    var endDate = getDatesFromPicker('input[name="correction-duration"]').endDate;
1205
    doGetAjaxRequestHandler(context + "/grnCorrection?startDate=" + startDate + "&endDate=" + endDate, function (response) {
1206
        $('#main-content').html(response);
1207
    });
1208
});
1209
 
1210
$(document).on('click', '.submitGrnCorrection', function () {
1211
    var invoiceId = $(this).data('invoiceid');
1212
    var remarks = $('#correctionRemarks').val();
1213
 
1214
    if (!remarks || remarks.trim() === '') {
1215
        alert("Please enter remarks explaining the reason for correction");
1216
        return false;
1217
    }
1218
 
1219
    // Collect serial number corrections (old → new)
1220
    var corrections = [];
1221
    $('#serial-corrections-table > tbody > tr').each(function () {
1222
        var oldSerial = $(this).find('.old-serial').val();
1223
        var newSerial = $(this).find('.new-serial').val();
1224
 
1225
        if (oldSerial && newSerial && oldSerial.trim() !== '' && newSerial.trim() !== '') {
1226
            corrections.push({
1227
                oldSerialNumber: oldSerial.trim(),
1228
                newSerialNumber: newSerial.trim()
1229
            });
1230
        }
1231
    });
1232
 
35884 amit 1233
    // Collect item corrections (serialized or non-serialized)
35806 amit 1234
    var qtyCorrections = [];
36206 amit 1235
    var imeiCountError = false;
35806 amit 1236
    $('#qty-corrections-table > tbody > tr').each(function () {
1237
        var oldItemId = $(this).find('.qty-old-itemid').val();
1238
        var newItemId = $(this).find('.qty-new-itemid').val();
35884 amit 1239
        var serial = $(this).find('.qty-serial').val();
35806 amit 1240
        var qty = parseInt($(this).find('.qty-correction-val').val());
1241
 
35884 amit 1242
        if (oldItemId && newItemId && serial && serial.trim() !== '') {
36206 amit 1243
            // Split IMEIs by space, comma, or newline
1244
            var imeis = serial.trim().split(/[\s,]+/).filter(function(s) { return s.length > 0; });
1245
            var imeiCount = imeis.length;
1246
 
1247
            // Auto-set qty from IMEI count, validate if qty was manually entered
1248
            if (qty > 0 && qty !== imeiCount) {
1249
                alert("Row error: Qty (" + qty + ") does not match IMEI count (" + imeiCount + ").\nIMEIs: " + imeis.join(", "));
1250
                imeiCountError = true;
1251
                return false;
1252
            }
1253
 
1254
            // Create one entry per IMEI (each with qty=1)
1255
            for (var i = 0; i < imeis.length; i++) {
1256
                qtyCorrections.push({
1257
                    oldItemId: parseInt(oldItemId),
1258
                    newItemId: parseInt(newItemId),
1259
                    qty: 1,
1260
                    serialNumber: imeis[i].trim()
1261
                });
1262
            }
35884 amit 1263
        } else if (oldItemId && newItemId && qty > 0) {
1264
            qtyCorrections.push({
1265
                oldItemId: parseInt(oldItemId),
1266
                newItemId: parseInt(newItemId),
35806 amit 1267
                qty: qty
1268
            });
1269
        }
1270
    });
1271
 
36206 amit 1272
    if (imeiCountError) return false;
1273
 
35806 amit 1274
    if (corrections.length === 0 && qtyCorrections.length === 0) {
1275
        alert("No corrections specified. Please enter serial number or quantity corrections.");
1276
        return false;
1277
    }
1278
 
1279
    var requestModel = {
1280
        invoiceId: invoiceId,
1281
        remarks: remarks,
1282
        corrections: corrections,
1283
        qtyCorrections: qtyCorrections
1284
    };
1285
 
1286
    if (confirm("Are you sure you want to raise this GRN correction request?")) {
1287
        doPostAjaxRequestWithJsonHandler(context + "/raiseGrnCorrection",
1288
            JSON.stringify(requestModel), function (response) {
36299 amit 1289
                var parsed;
1290
                try { parsed = typeof response === 'string' ? JSON.parse(response) : response; }
1291
                catch (e) { parsed = null; }
1292
                if (parsed && parsed.status === true) {
1293
                    if (parsed.autoApproved) {
1294
                        alert("Correction applied successfully (auto-approved: no model/qty change)");
1295
                    } else {
1296
                        alert("Correction request raised for approval");
1297
                    }
35806 amit 1298
                    loadGrnCorrection("main-content");
1299
                }
1300
            });
1301
    }
1302
});
1303
 
1304
$(document).on('click', '.approveGrnCorrectionBtn', function () {
1305
    var requestId = $(this).data('requestid');
1306
    var remarks = $('#approvalRemarks').val();
1307
 
1308
    if (confirm("Are you sure you want to APPROVE this correction request? This will apply the IMEI/qty changes.")) {
1309
        doPostAjaxRequestHandler(context + "/approveGrnCorrection?requestId=" + requestId + "&remarks=" + encodeURIComponent(remarks),
1310
            function (response) {
1311
                if (response == 'true') {
1312
                    alert("Correction approved and applied successfully");
1313
                    loadGrnCorrectionApproval("main-content");
1314
                }
1315
            });
1316
    }
1317
});
1318
 
1319
$(document).on('click', '.rejectGrnCorrectionBtn', function () {
1320
    var requestId = $(this).data('requestid');
1321
    var remarks = $('#approvalRemarks').val();
1322
 
1323
    if (!remarks || remarks.trim() === '') {
1324
        alert("Please enter remarks explaining the reason for rejection");
1325
        return false;
1326
    }
1327
 
1328
    if (confirm("Are you sure you want to REJECT this correction request?")) {
1329
        doPostAjaxRequestHandler(context + "/rejectGrnCorrection?requestId=" + requestId + "&remarks=" + encodeURIComponent(remarks),
1330
            function (response) {
1331
                if (response == 'true') {
1332
                    alert("Correction request rejected");
1333
                    loadGrnCorrectionApproval("main-content");
1334
                }
1335
            });
1336
    }
1337
});
1338
 
1339
function loadGrnCorrection(domId) {
1340
    doGetAjaxRequestHandler(context + "/grnCorrection", function (response) {
1341
        $('#' + domId).html(response);
1342
    });
1343
}
1344
 
1345
function loadGrnCorrectionApproval(domId) {
1346
    doGetAjaxRequestHandler(context + "/grnCorrectionApproval", function (response) {
1347
        $('#' + domId).html(response);
1348
    });
1349
}
1350
 
1351
function loadGrnCorrectionDetail(invoiceId) {
1352
    doGetAjaxRequestHandler(context + "/grnCorrectionDetail?invoiceId=" + invoiceId, function (response) {
1353
        $('.grnCorrectionDetailContainer').html(response);
1354
    });
1355
}
1356
 
1357
function loadGrnCorrectionRequestDetail(requestId) {
1358
    doGetAjaxRequestHandler(context + "/grnCorrectionRequestDetail?requestId=" + requestId, function (response) {
1359
        $('.grnCorrectionRequestDetailContainer').html(response);
1360
    });
1361
}
1362
 
1363