Blame view
src/pages/Account/invoice.vue
39.7 KB
687e0b929
|
1 |
<template> |
68d742034
|
2 |
<v-container fluid class="body-color"> |
81d876b5d
|
3 4 5 6 7 8 9 10 11 |
<!-- ****** Edit INVOICE ****** --> <v-dialog v-model="editInvoiceDialog"> <v-card flat class="text-xs-center white--text"> <v-layout> <v-flex xs12 class="card-styles pa-2"> <label class="title text-xs-center">Edit Invoice</label> <v-icon size="24" class="right white--text" @click="editInvoiceDialog = false">cancel</v-icon> </v-flex> </v-layout> |
88868752b
|
12 |
<editInvoice :editData="editData" @update-editInvoice="updateDoneInvoice" /> |
81d876b5d
|
13 14 15 16 17 18 19 20 21 22 23 24 |
</v-card> </v-dialog> <!-- ****PAYMENT INVOICE DIALOG --> <v-dialog v-model="paymentInvoiceDialog"> <v-card flat class="text-xs-center white--text"> <v-layout> <v-flex xs12 class="card-styles pa-2"> <label class="title text-xs-center">Payment Template</label> <v-icon size="24" class="right white--text" @click="paymentInvoiceDialog = false">cancel</v-icon> </v-flex> </v-layout> |
e03bf1f92
|
25 |
<paymentTemplate :editPayment="editPayment" @update-Payment="updatePayment" /> |
81d876b5d
|
26 27 28 29 |
</v-card> </v-dialog> <!-- ****** PROFILE VIEW SECTION DATA ****** --> |
c765369af
|
30 |
|
81d876b5d
|
31 32 33 34 35 36 37 38 |
<v-dialog v-model="dialog1" max-width="800px"> <v-card flat class="text-xs-center white--text"> <v-layout> <v-flex xs12 class="card-style pa-2"> <label class="title text-xs-center">View Payments</label> <v-icon size="24" class="right" color="white" @click="dialog1 = false">cancel</v-icon> </v-flex> </v-layout> |
c62132b75
|
39 |
<table class="feeTypeTable tableRsponsive"> |
81d876b5d
|
40 41 42 43 44 45 46 47 |
<tr style="color: black"> <th>#</th> <th>Date</th> <th>Paid By</th> <th>Payment Amount</th> <th>Weaver</th> <th>Action</th> </tr> |
c62132b75
|
48 |
<tr v-if="editedItem.paymentStatus !== 'NOT_PAID'"> |
b9759239c
|
49 50 51 |
<td style="width:40px ; color:black" class="tdFeeType">1</td> <td style="width:120px; color:black" class="tdFeeType">{{dates( editedItem.date) }}</td> <td style="width:120px; color:black" class="tdFeeType">{{ editedItem.paymentMethod }}</td> |
b3860f8e6
|
52 |
<td style="width:120px; color:black" class="tdFeeType">{{ editedItem.totalPaidAmount }}</td> |
b9759239c
|
53 |
<td style="width:120px; color:black" class="tdFeeType">{{ editedItem.totalDiscount}}</td> |
81d876b5d
|
54 55 56 57 |
<td class="text-xs-center td td-row"> <router-link :to="{ name:'View Payment Invoice',params: { viewPaymentInvoiceId:editedItem._id } }" > |
c62132b75
|
58 |
<v-tooltip top> |
81d876b5d
|
59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
<img slot="activator" style="cursor:pointer; width:25px; height:25px; " class="mr-3" src="/static/icon/view.png" /> <span>View</span> </v-tooltip> </router-link> <v-tooltip top> <img slot="activator" style="cursor:pointer;width:20px; height:20px; " class="mr-3" |
b3860f8e6
|
73 |
@click="deletePayment(editedItem)" |
81d876b5d
|
74 75 76 77 78 79 |
src="/static/icon/delete.png" /> <span>Delete</span> </v-tooltip> </td> </tr> |
b9759239c
|
80 |
</table> |
68d742034
|
81 |
</v-card> |
81d876b5d
|
82 |
</v-dialog> |
687e0b929
|
83 |
|
b9759239c
|
84 |
<!-- ****** Invoice Table ****** --> |
68d742034
|
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
<v-toolbar color="transparent" flat> <v-btn fab dark class="open-dialog-button hidden-xl-only hidden-md-only hidden-lg-only" small @click="addInvoiceDialog = true" > <v-icon dark>add</v-icon> </v-btn> <v-btn round class="open-dialog-button hidden-sm-only hidden-xs-only" dark @click="addInvoiceDialog = true" > <v-icon class="white--text pr-1" size="20">add</v-icon>Add Invoice </v-btn> <v-spacer></v-spacer> <v-card-title class="body-1" v-show="show"> <v-btn icon large flat @click="displaySearch"> <v-avatar size="27"> |
aa310d61a
|
107 |
<img src="/static/icon/search.png" alt="icon" /> |
68d742034
|
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
</v-avatar> </v-btn> </v-card-title> <v-flex xs8 sm8 md3 lg2 v-show="showSearch"> <v-layout> <v-text-field v-model="search" label="Search" prepend-inner-icon="search" color="primary"></v-text-field> <v-icon @click="closeSearch" color="error">close</v-icon> </v-layout> </v-flex> </v-toolbar> <v-data-table :headers="headers" :items="invoiceList" :pagination.sync="pagination" :search="search" > <template slot="items" slot-scope="props"> <tr class="tr"> <td class="td td-row">{{ props.index + 1 }}</td> |
81d876b5d
|
127 |
<td class="text-xs-center td td-row">{{ props.item.studentId.name }}</td> |
68d742034
|
128 129 |
<td class="text-xs-center td td-row">{{ props.item.classId.classNum }}</td> <td class="text-xs-center td td-row">{{ props.item.totalAmount }}</td> |
c62132b75
|
130 |
<td class="text-xs-center td td-row">{{ props.item.totalDiscount}}</td> |
68d742034
|
131 132 133 134 135 |
<td class="text-xs-center td td-row" >{{ props.item.totalPaidAmount ? props.item.totalPaidAmount : 0}}</td> <td class="text-xs-center td td-row" |
81d876b5d
|
136 |
>{{ props.item.totalPaidAmount ? props.item.totalSubTotal - props.item.totalPaidAmount : props.item.totalSubTotal }}</td> |
68d742034
|
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 |
<td class="text-xs-center td td-row" v-if="props.item.paymentStatus === 'NOT_PAID'"> <span class="red lighten-1 py-1 px-2 white--text paymentStatus" >{{ props.item.paymentStatus }}</span> </td> <td class="text-xs-center td td-row" v-if="props.item.paymentStatus === 'FULLY_PAID'"> <span class="green lighten-1 py-1 px-2 white--text paymentStatus" >{{ props.item.paymentStatus }}</span> </td> <td class="text-xs-center td td-row" v-if="props.item.paymentStatus === 'PARTIALLY_PAID'"> <span class="yellow darken-3 py-1 px-2 white--text paymentStatus" >{{ props.item.paymentStatus }}</span> </td> <td class="text-xs-center td td-row">{{ dates(props.item.date) }}</td> <td class="text-xs-center td td-row"> |
aa310d61a
|
154 |
<router-link :to="{ name:'View Invoice',params: { viewInvoiceId:props.item._id } }"> |
68d742034
|
155 156 157 158 159 |
<v-tooltip top> <img slot="activator" style="cursor:pointer; width:25px; height:25px; " class="mr-3" |
aa310d61a
|
160 |
src="/static/icon/view.png" |
68d742034
|
161 162 163 164 165 |
/> <span>View</span> </v-tooltip> </router-link> <span v-if="props.item.paymentStatus === 'NOT_PAID'"> |
c62132b75
|
166 167 168 169 170 171 172 173 174 175 176 177 |
<!-- <router-link :to="{ name: 'Edit Invoice',params: { invoiceid: editData._id } }"> <v-tooltip top> <img slot="activator" style="cursor:pointer; width:20px; height:18px; " class="mr-3" @click="editItem(props.item)" src="/static/icon/edit.png" /> <span>Edit</span> </v-tooltip> </router-link>--> |
81d876b5d
|
178 179 180 181 182 183 184 185 186 187 |
<v-tooltip top> <img slot="activator" style="cursor:pointer; width:20px; height:18px; " class="mr-3" @click="editItem(props.item)" src="/static/icon/edit.png" /> <span>Edit</span> </v-tooltip> |
68d742034
|
188 189 190 191 192 193 |
<v-tooltip top> <img slot="activator" style="cursor:pointer;width:20px; height:20px; " class="mr-3" @click="deleteItem(props.item)" |
aa310d61a
|
194 |
src="/static/icon/delete.png" |
68d742034
|
195 196 197 |
/> <span>Delete</span> </v-tooltip> |
81d876b5d
|
198 199 200 201 202 203 204 205 206 207 |
<v-tooltip top> <img slot="activator" style="cursor:pointer; width:20px; height:18px; " class="mr-3" @click="paymentItem(props.item)" src="/static/schoolIcons/Account.png" /> <span>Payment</span> </v-tooltip> |
68d742034
|
208 |
</span> |
81d876b5d
|
209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 |
<span v-if="props.item.paymentStatus === 'PARTIALLY_PAID'"> <v-tooltip top> <img slot="activator" style="cursor:pointer; width:20px; height:18px; " class="mr-3" @click="paymentItem(props.item)" src="/static/schoolIcons/Account.png" /> <span>Payment</span> </v-tooltip> </span> <v-tooltip top> <img slot="activator" |
ff30cbe86
|
224 |
style="cursor:pointer; width:18px; height:17px;" |
81d876b5d
|
225 226 227 228 229 |
@click="profile(props.item)" src="/static/icon/eye1.png" /> <span>View Payment</span> </v-tooltip> |
68d742034
|
230 231 232 233 234 235 236 237 238 239 |
</td> </tr> </template> <v-alert slot="no-results" :value="true" color="error" icon="warning" >Your search for "{{ search }}" found no results.</v-alert> </v-data-table> |
b9759239c
|
240 |
|
68d742034
|
241 |
<!-- ****** ADD INVOICE ****** --> |
81d876b5d
|
242 243 244 245 246 247 248 249 250 |
<v-snackbar :timeout="timeout" :top="y === 'top'" :right="x === 'right'" :vertical="mode === 'vertical'" v-model="snackbar" :color="color" >{{ text }}</v-snackbar> <v-dialog v-model="addInvoiceDialog"> |
68d742034
|
251 252 |
<v-card flat class="text-xs-center white--text"> <v-layout> |
81d876b5d
|
253 254 |
<v-flex xs12 class="card-styles pa-2"> <label class="title text-xs-center">Add Invoice</label> |
68d742034
|
255 256 257 258 259 260 261 262 263 264 |
<v-icon size="24" class="right white--text" @click="addInvoiceDialog = false">cancel</v-icon> </v-flex> </v-layout> <v-flex xs12 sm12> <v-container fluid grid-list-md> <v-layout wrap> <v-flex xs12 sm12 md5> <v-card flat> <v-toolbar dark class="card-styles" flat> <v-spacer></v-spacer> |
81d876b5d
|
265 |
<h3>Invoice</h3> |
68d742034
|
266 267 268 |
<v-spacer></v-spacer> </v-toolbar> <v-form ref="form" v-model="valid" lazy-validation class="py-4"> |
687e0b929
|
269 |
<v-layout> |
68d742034
|
270 271 272 |
<v-flex xs4 class="pt-4 subheading"> <label class="right hidden-xs-only hidden-sm-only">Select Class:</label> <label class="right hidden-lg-only hidden-md-only hidden-xl-only">Class:</label> |
687e0b929
|
273 |
</v-flex> |
68d742034
|
274 275 276 277 278 279 280 281 282 283 284 |
<v-flex xs6 class="ml-3"> <v-select :items="addclass" label="Select Class" v-model="invoiceData.classNum" item-text="classNum" item-value="_id" @change="getAllStudents()" :rules="classRules" required ></v-select> |
687e0b929
|
285 286 287 |
</v-flex> </v-layout> <v-layout> |
68d742034
|
288 289 290 |
<v-flex xs4 class="pt-4 subheading"> <label class="right hidden-xs-only hidden-sm-only">Select Student:</label> <label class="right hidden-lg-only hidden-md-only hidden-xl-only">Student:</label> |
687e0b929
|
291 |
</v-flex> |
68d742034
|
292 293 294 295 296 297 298 299 300 301 302 |
<v-flex xs6 class="ml-3"> <v-select :items="studentList" label="Select Student" v-model="invoiceData.studentId" item-text="name" item-value="_id" :rules="inchargeRules" @change="selectAllStudent()" required ></v-select> |
687e0b929
|
303 304 305 |
</v-flex> </v-layout> <v-layout> |
68d742034
|
306 307 |
<v-flex xs4 class="pt-4 subheading"> <label class="right">Date:</label> |
687e0b929
|
308 |
</v-flex> |
68d742034
|
309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 |
<v-flex xs6 class="ml-3"> <v-menu ref="menu1" :close-on-content-click="false" v-model="menu1" :nudge-right="40" lazy :return-value.sync="invoiceData.date" transition="scale-transition" offset-y full-width min-width="290px" > <v-text-field slot="activator" :rules="dateRules" v-model="invoiceData.date" placeholder="Select date" ></v-text-field> <v-date-picker v-model="invoiceData.date" @input="$refs.menu1.save(invoiceData.date)" ></v-date-picker> </v-menu> |
687e0b929
|
333 334 335 |
</v-flex> </v-layout> <v-layout> |
68d742034
|
336 337 338 |
<v-flex xs4 class="pt-4 subheading"> <label class="right hidden-xs-only hidden-sm-only">Payment Status:</label> <label class="right hidden-lg-only hidden-md-only hidden-xl-only">Payment:</label> |
687e0b929
|
339 |
</v-flex> |
68d742034
|
340 341 342 343 344 345 346 347 348 349 350 |
<v-flex xs6 class="ml-3"> <v-select :items="paymentStatus" v-model="invoiceData.paymentStatus" item-text="name" item-value="value" label="Select Payment Status" @change="getPayMethodList" :rules="paymentStatusRules" required ></v-select> |
687e0b929
|
351 352 |
</v-flex> </v-layout> |
68d742034
|
353 354 355 |
<v-layout v-show="showPayMethods"> <v-flex xs4 class="pt-4 subheading"> <label class="right">Payment Method:</label> |
687e0b929
|
356 |
</v-flex> |
68d742034
|
357 |
<v-flex xs6 class="ml-3"> |
687e0b929
|
358 |
<v-select |
68d742034
|
359 360 |
:items="paymentMethods" v-model="invoiceData.paymentMethod" |
728b5d417
|
361 |
:rules="paymentMethodRules" |
68d742034
|
362 363 |
label="Select Payment Method" required |
687e0b929
|
364 365 |
></v-select> </v-flex> |
68d742034
|
366 367 368 369 370 371 |
</v-layout> <v-layout> <v-flex xs12 sm11> <v-card-actions> <v-spacer></v-spacer> <v-btn @click="clear" round dark class="clear-button">clear</v-btn> |
81d876b5d
|
372 373 374 375 376 377 378 |
<v-btn @click="submit" round dark :loading="loading" class="add-button" >Add</v-btn> |
68d742034
|
379 |
</v-card-actions> |
687e0b929
|
380 381 |
</v-flex> </v-layout> |
68d742034
|
382 383 384 385 386 |
</v-form> </v-card> </v-flex> <v-flex xs12 sm12 md7> <v-card> |
81d876b5d
|
387 |
<v-toolbar dark class="card-styles" flat> |
68d742034
|
388 |
<v-spacer></v-spacer> |
81d876b5d
|
389 |
<h3>Fee Type List</h3> |
68d742034
|
390 391 392 393 |
<v-spacer></v-spacer> </v-toolbar> <v-layout> <v-flex xs4 sm2 class="mt-4 hidden-xs-only hidden-sm-only"> |
81d876b5d
|
394 |
<label class="right title">Fee Type:</label> |
68d742034
|
395 396 397 398 399 400 401 402 |
</v-flex> <v-flex xs8 sm4> <v-select :items="feeTypes" v-model="feeType.feeTypeName" item-text="feeType" item-value="feeType" label="Select Fee Type" |
81d876b5d
|
403 |
required |
68d742034
|
404 405 406 |
></v-select> </v-flex> <v-flex xs4 sm6> |
81d876b5d
|
407 408 409 410 411 412 413 |
<v-btn color="open-dialog-button" round dark class="right mt-3" @click="selectFeeType" >ADD</v-btn> |
68d742034
|
414 415 416 417 418 419 420 |
</v-flex> </v-layout> <table class="feeTypeTable tableRsponsive"> <tr class="info white--text"> <th>#</th> <th>Fee Type</th> <th>Amount</th> |
ff30cbe86
|
421 |
<th>Discount</th> |
68d742034
|
422 423 424 425 426 427 428 429 430 431 432 |
<th>Subtotal</th> <th>Paid Amount</th> <th>Action</th> </tr> <tr v-show="showFeeType" v-for="(feeType, index) in feeTypeData" :key="index" v-on:keyup="getAmmountDetails(feeType)" > <td style="width:40px" class="tdFeeType">{{ index + 1 }}</td> |
81d876b5d
|
433 434 435 436 437 |
<td style="width:120px" class="tdFeeType" :rules="feeTypeNameRules" >{{ feeType.feeTypeName }}</td> |
68d742034
|
438 439 440 441 442 |
<td class="tdFeeType"> <v-text-field placeholder="fill your Amount" v-model="feeType.amount" type="number" |
81d876b5d
|
443 444 |
:rules="amountRules" required |
68d742034
|
445 446 447 448 449 450 451 |
></v-text-field> </td> <td class="tdFeeType"> <v-text-field placeholder="fill your Discount" v-model="feeType.discount" type="number" |
81d876b5d
|
452 453 |
:rules="discountRules" required |
68d742034
|
454 455 |
></v-text-field> </td> |
81d876b5d
|
456 457 |
<td class="tdFeeType" :rules="subtotalRules">{{ feeType.subTotal }}</td> <td class="tdFeeType" v-if="invoiceData.paymentStatus === 'NOT_PAID'"> |
68d742034
|
458 459 460 461 462 463 |
<v-text-field placeholder="fill your Paid Amount" v-model="feeType.paidAmount" type="number" :disabled="disabled" ></v-text-field> |
81d876b5d
|
464 |
</td> |
68d742034
|
465 466 467 468 469 470 471 472 473 474 475 |
<td class="tdFeeType" v-if="invoiceData.paymentStatus == ''"> <v-text-field placeholder="fill your Paid Amount" v-model="feeType.paidAmount" type="number" :disabled="disabled" ></v-text-field> </td> <td class="tdFeeType" v-if="invoiceData.paymentStatus != 'NOT_PAID' && invoiceData.paymentStatus != ''" |
687e0b929
|
476 |
> |
68d742034
|
477 478 479 480 481 482 483 |
<v-text-field placeholder="fill your Paid Amount" v-model="feeType.paidAmount" type="number" ></v-text-field> </td> <td class="tdFeeType"> |
11f495070
|
484 |
<v-icon color="error" @click="deleteSelectFee(index,feeType)">delete</v-icon> |
68d742034
|
485 486 487 488 489 |
</td> </tr> <tfoot> <tr> <td colspan="2" class="tdFeeType">Total:</td> |
b9759239c
|
490 491 492 493 |
<td class="tdFeeType">{{ feeType.amount }}</td> <td class="tdFeeType">{{ feeType.discount }}</td> <td class="tdFeeType">{{ feeType.subTotal }}</td> <td class="tdFeeType">{{ feeType.paidAmount }}</td> |
11f495070
|
494 |
<!-- <td class="tdFeeType"> |
81d876b5d
|
495 |
<v-icon color="error" @click="deleteSelectFee(index)">delete</v-icon> |
11f495070
|
496 |
</td>--> |
687e0b929
|
497 |
</tr> |
68d742034
|
498 499 500 501 502 503 504 505 506 |
</tfoot> </table> </v-card> </v-flex> </v-layout> </v-container> </v-flex> </v-card> </v-dialog> |
687e0b929
|
507 508 509 |
<div class="loader" v-if="showLoader"> <v-progress-circular indeterminate color="white"></v-progress-circular> </div> |
68d742034
|
510 |
</v-container> |
687e0b929
|
511 512 513 514 |
</template> <script> import http from "@/Services/http.js"; |
88868752b
|
515 |
import editInvoice from "./editInvoice"; |
3e79b2f9f
|
516 |
import paymentTemplate from "./paymentTemplate.vue"; |
687e0b929
|
517 518 519 |
import moment from "moment"; export default { |
88868752b
|
520 |
components: { |
3e79b2f9f
|
521 522 |
editInvoice: editInvoice, paymentTemplate: paymentTemplate |
88868752b
|
523 |
}, |
687e0b929
|
524 525 526 527 528 529 |
data: () => ({ snackbar: false, showPayMethods: false, y: "top", x: "right", mode: "", |
d9bb52b5b
|
530 |
timeout: 5000, |
687e0b929
|
531 |
text: "", |
d9bb52b5b
|
532 |
color: "", |
68d742034
|
533 534 |
show: true, showSearch: false, |
687e0b929
|
535 536 537 538 539 540 541 542 543 544 |
showLoader: false, loading: false, date: null, search: "", dialog: false, dialog1: false, valid: true, validEdit: true, isActive: true, newActive: false, |
b9759239c
|
545 |
showFeeType: true, |
68d742034
|
546 |
addInvoiceDialog: false, |
81d876b5d
|
547 548 |
editInvoiceDialog: false, paymentInvoiceDialog: false, |
687e0b929
|
549 550 551 |
disabled: true, details: [], feeTypes: [], |
81d876b5d
|
552 |
invoiceData: [], |
879451281
|
553 |
editData: [], |
b9759239c
|
554 |
invoiceList: [], |
879451281
|
555 556 |
editPayment: { studentId: { |
c62132b75
|
557 558 |
name: "", rollNo: "" |
879451281
|
559 560 |
}, classId: { |
c62132b75
|
561 |
classNum: "" |
879451281
|
562 563 |
} }, |
687e0b929
|
564 565 566 567 568 |
menu1: false, paymentMethods: ["Cash", "Cheque"], feeType: { amount: "0.00", discount: "0.00", |
687e0b929
|
569 |
subTotal: "0.00", |
6df6faccd
![]() |
570 |
paidAmount: "0.00", |
687e0b929
|
571 572 |
feeTypeName: "" }, |
c62132b75
|
573 |
|
687e0b929
|
574 |
feeTypeData: [], |
88868752b
|
575 576 |
editFeeTypeData: [], paymentFeeTypeData: [], |
687e0b929
|
577 |
pagination: { |
68d742034
|
578 |
rowsPerPage: 10 |
687e0b929
|
579 580 581 582 583 |
}, classRules: [v => !!v || " Class Name is required"], inchargeRules: [v => !!v || "Student Name is required"], dateRules: [v => !!v || " Date is required"], paymentStatusRules: [v => !!v || "Payment Status is required"], |
6ae46ca27
|
584 |
paymentMethodsRules: [v => !!v || "payment Method is required"], |
81d876b5d
|
585 586 587 588 589 590 591 |
feeTypeRules: [v => !!v || "Fee Type is required"], feeTypeNameRules: [v => !!v || "Fee Type Name is required"], amountRules: [v => !!v || "Amount is required"], discountRules: [v => !!v || "Discount is required"], subtotalRules: [v => !!v || "Subtotal is required"], paymentRules: [v => !!v || "Payment is required"], paidAmountRules: [v => !!v || "Paid Amount is required"], |
728b5d417
|
592 |
paymentMethodRules: [], |
687e0b929
|
593 594 595 |
headers: [ { text: "No", |
68d742034
|
596 |
align: "", |
687e0b929
|
597 598 599 |
sortable: false, value: "No" }, |
81d876b5d
|
600 601 602 603 604 605 |
{ text: "Student", value: "name", sortable: false, align: "center" }, |
687e0b929
|
606 607 |
{ text: "Class", value: "class", sortable: false, align: "center" }, { text: "Total", value: "subtotal", sortable: false, align: "center" }, |
c62132b75
|
608 |
{ |
ff30cbe86
|
609 |
text: "Discount", |
c62132b75
|
610 611 612 613 |
value: "discount", sortable: false, align: "center" }, |
687e0b929
|
614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 |
{ text: "Paid Amount", value: "paidAmount", sortable: false, align: "center" }, { text: "Balance", value: "Balance", sortable: false, align: "center" }, { text: "Status", value: "paymentStatus", sortable: false, align: "center" }, { text: "Date", value: "date", sortable: false, align: "center" }, { text: "Action", value: "", sortable: false, align: "center" } ], |
b9759239c
|
640 |
|
81d876b5d
|
641 642 643 |
studentId: { name: "" }, |
687e0b929
|
644 645 646 |
token: "", editedItem: {}, invoiceData: { |
d45ffc6fa
|
647 648 |
paymentStatus: "", students: [] |
687e0b929
|
649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 |
}, addclass: [], studentList: [], paymentStatus: [ { name: "Not Paid", value: "NOT_PAID" }, { name: "Partially Paid", value: "PARTIALLY_PAID" }, { name: "Fully Paid", value: "FULLY_PAID" } ] }), methods: { save(date) { this.$refs.menu1.save(date); }, dates: function(date) { return moment(date).format("MMMM DD, YYYY"); }, |
81d876b5d
|
674 |
profile(item) { |
b9759239c
|
675 |
// console.log("item", item); |
81d876b5d
|
676 |
this.editedIndex = this.invoiceList.indexOf(item); |
da153da77
|
677 |
this.editedItem = Object.assign({}, item); |
88868752b
|
678 |
console.log("editedItem", this.editedItem); |
81d876b5d
|
679 680 681 682 |
this.dialog1 = true; }, editItem(item) { this.editedIndex = this.invoiceList.indexOf(item); |
879451281
|
683 |
this.editData = Object.assign({}, item); |
88868752b
|
684 685 686 |
this.editData.date = this.editData.date.slice(0, 10); // console.log("invoiceData", this.editData); this.editFeeTypeData = this.editData.feeType; |
81d876b5d
|
687 688 689 |
this.editInvoiceDialog = true; }, paymentItem(item) { |
879451281
|
690 |
// console.log("item", item); |
81d876b5d
|
691 |
this.editedIndex = this.invoiceList.indexOf(item); |
b9759239c
|
692 |
this.editPayment = Object.assign({}, item); |
3e79b2f9f
|
693 |
this.editPayment.date = this.editPayment.date.slice(0, 10); |
c765369af
|
694 695 696 697 698 699 |
if (this.editPayment.paymentStatus == "NOT_PAID") { for (let i = 0; i < this.editPayment.feeType.length; i++) { this.editPayment.feeType[i].paidAmount = "0.00"; } } // console.log("this.editPayment", this.editPayment); |
88868752b
|
700 |
this.paymentFeeTypeData = this.editPayment.feeType; |
81d876b5d
|
701 702 |
this.paymentInvoiceDialog = true; }, |
687e0b929
|
703 704 705 706 707 708 709 710 711 712 713 714 |
deleteItem(item) { let deleteInvoice = { invoiceId: item._id }; http() .delete( "/deleteInvoice", confirm("Are you sure you want to delete this?") && { params: deleteInvoice } ) .then(response => { |
d9bb52b5b
|
715 716 |
this.snackbar = true; this.text = "Successfully delete Existing Invoice"; |
b3860f8e6
|
717 718 719 720 721 722 723 724 725 726 727 728 729 |
this.color = "green"; this.dialog1 = false; this.getInvoiceList(); }) .catch(error => { // console.log(error); }); }, deletePayment(editedItem) { let deleteInvoice = { invoiceId: editedItem._id }; http() |
c62132b75
|
730 731 732 733 734 735 736 |
.put( "/removePayment", deleteInvoice, confirm("Are you sure you want to delete this?") && { headers: { Authorization: "Bearer " + this.token } |
b3860f8e6
|
737 |
} |
c62132b75
|
738 |
) |
b3860f8e6
|
739 740 741 |
.then(response => { this.snackbar = true; this.text = "Successfully delete Existing Invoice"; |
d9bb52b5b
|
742 |
this.color = "green"; |
81d876b5d
|
743 |
this.dialog1 = false; |
687e0b929
|
744 745 746 747 748 749 |
this.getInvoiceList(); }) .catch(error => { // console.log(error); }); }, |
687e0b929
|
750 751 |
close() { this.dialog = false; |
687e0b929
|
752 |
}, |
d9bb52b5b
|
753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 |
// totalAmount() { // // console.log("this.feeType.paidAmount ", this.feeType.paidAmount); // // console.log( // // "this.feeType.subTotalAAAAAAAAAAAAAAA ", // // this.feeType.subTotal // // ); // if (this.feeType.paidAmount < this.feeType.subTotal) { // console.log("this.feeType.subTotalBBBBBBBBBBB ", this.feeType.subTotal); // this.feeType.paidAmount = this.feeType.subTotal; // console.log( // "this.feeType.paidAmount BBBBBBBBBBB", // this.feeType.paidAmount // ); // } // }, |
687e0b929
|
770 771 772 773 774 775 776 |
submit() { let feeTypeId = ""; for (let i = 0; i < this.feeTypes.length; i++) { if (this.feeTypes[i].feeType === this.feeType.feeTypeName) { feeTypeId = this.feeTypes[i]._id; } } |
88868752b
|
777 778 779 780 781 782 783 784 |
if (this.$refs.form.validate()) { let invoiceData = { classId: this.invoiceData.classNum, students: this.invoiceData.students, date: this.invoiceData.date, paymentStatus: this.invoiceData.paymentStatus, paymentMethod: this.invoiceData.paymentMethod, feeType: this.feeTypeData, |
c765369af
|
785 786 |
totalAmount: this.feeType.amount.toString(), totalDiscount: this.feeType.discount.toString(), |
11f495070
|
787 |
totalSubTotal: this.feeType.subTotal.toString(), |
88868752b
|
788 789 |
totalPaidAmount: this.feeType.paidAmount }; |
11f495070
|
790 791 792 793 |
if (invoiceData.paymentStatus == "NOT_PAID") { delete invoiceData.paymentMethod; } |
c765369af
|
794 795 796 |
if (this.feeType.paidAmount != "0.00") { if (this.feeType.subTotal == this.feeType.paidAmount) { invoiceData.paymentStatus = "FULLY_PAID"; |
d650dbf7d
|
797 |
// console.log("FULLY_PAID"); |
c765369af
|
798 799 800 801 |
} if (invoiceData.totalPaidAmount) { if (this.feeType.subTotal != this.feeType.paidAmount) { invoiceData.paymentStatus = "PARTIALLY_PAID"; |
d650dbf7d
|
802 |
// console.log("PARTIALLY_PAID"); |
c765369af
|
803 |
} |
e03bf1f92
|
804 |
} |
11f495070
|
805 806 807 808 809 810 811 812 813 |
} if (invoiceData.totalSubTotal == "0.00") { invoiceData.paymentStatus = "FULLY_PAID"; } else if (invoiceData.totalSubTotal != "0.00") { if (this.feeType.paidAmount === "0.00") { invoiceData.paymentStatus = "NOT_PAID"; delete invoiceData.paymentMethod; } |
e03bf1f92
|
814 |
} |
88868752b
|
815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 |
http() .post("/createInvoice", invoiceData) .then(response => { this.getInvoiceList(); this.snackbar = true; this.text = "New Invoice added successfully"; this.color = "green"; this.clear(); this.feeTypeData = []; if (this.feeTypeData.length == 0) { this.feeType = { amount: "0.00", discount: "0.00", paidAmount: "0.00", subTotal: "0.00", feeTypeList: "" }; } this.loading = false; this.addInvoiceDialog = false; }) .catch(error => { this.snackbar = true; this.text = error.response.data.errors[0].messages[0]; this.color = "error"; this.loading = false; }); |
81d876b5d
|
842 |
} |
81d876b5d
|
843 |
}, |
687e0b929
|
844 845 846 847 |
clear() { this.$refs.form.reset(); }, getInvoiceList() { |
6ae46ca27
|
848 |
this.showLoader = true; |
687e0b929
|
849 850 |
http() .get("/getInvoicesList", { |
99cd79184
|
851 |
params: { schoolId: this.$store.state.schoolId }, |
687e0b929
|
852 853 854 855 856 857 |
headers: { Authorization: "Bearer " + this.token } }) .then(response => { this.invoiceList = response.data.data; this.showLoader = false; }) |
ab54b5656
|
858 |
.catch(error => { |
687e0b929
|
859 860 861 862 863 864 865 866 867 868 869 870 |
// console.log("err====>", err); this.showLoader = false; if (error.response.status === 401) { this.$router.replace({ path: "/" }); this.$store.dispatch("setToken", null); this.$store.dispatch("Id", null); } }); }, selectFeeType() { this.showFeeType = true; this.feeTypeData.push({ feeTypeName: this.feeType.feeTypeName }); |
687e0b929
|
871 |
}, |
11f495070
|
872 873 |
deleteSelectFee: function(index, feeTyp) { console.log("---index----", index); |
687e0b929
|
874 |
this.feeTypeData.splice(index, 1); |
11f495070
|
875 |
this.getAmmountDetails(feeTyp); |
687e0b929
|
876 877 878 879 880 881 882 883 884 885 886 887 888 |
if (this.feeTypeData.length == 0) { this.feeType = { amount: "0.00", discount: "0.00", paidAmount: "0.00", subTotal: "0.00", feeTypeName: "" }; } }, getAllClasses() { http() .get("/getClassesList", { |
99cd79184
|
889 |
params: { schoolId: this.$store.state.schoolId }, |
687e0b929
|
890 891 892 893 894 895 896 897 898 899 900 |
headers: { Authorization: "Bearer " + this.token } }) .then(response => { this.addclass = response.data.data; }) .catch(err => { // console.log("err====>", err); // this.$router.replace({ path: "/" }); }); }, getAllStudents() { |
d9bb52b5b
|
901 |
this.showLoader = true; |
687e0b929
|
902 903 |
http() .get("/getStudentsList", { |
99cd79184
|
904 905 906 907 |
params: { classId: this.invoiceData.classNum, schoolId: this.$store.state.schoolId }, |
687e0b929
|
908 909 910 |
headers: { Authorization: "Bearer " + this.token } }) .then(response => { |
d45ffc6fa
|
911 912 913 914 |
response.data.data.unshift({ name: "Select All", _id: "Select All" }); |
687e0b929
|
915 |
this.studentList = response.data.data; |
d9bb52b5b
|
916 |
this.showLoader = false; |
687e0b929
|
917 918 |
}) .catch(err => { |
d9bb52b5b
|
919 |
this.showLoader = false; |
687e0b929
|
920 921 922 923 924 925 926 |
// console.log("err====>", err); // this.$router.replace({ path: "/" }); }); }, getfeeType() { http() .get("/getFeesList", { |
99cd79184
|
927 928 929 |
params: { schoolId: this.$store.state.schoolId }, |
687e0b929
|
930 931 932 933 934 935 936 937 938 939 |
headers: { Authorization: "Bearer " + this.token } }) .then(response => { this.feeTypes = response.data.data; }) .catch(err => { // console.log("err====>", err); // this.$router.replace({ path: "/" }); }); }, |
c62132b75
|
940 |
|
e03bf1f92
|
941 |
getAmmountDetails(feeTyp) { |
687e0b929
|
942 |
let feeType = { |
de5a79260
|
943 944 945 946 |
amount: "0.00", discount: "0.00", subTotal: "0.00", subParticularTotal: "0.00", |
687e0b929
|
947 948 949 950 |
paidAmount: "" }; for (let i = 0; i < this.feeTypeData.length; i++) { // *********** AMOUNT *********** |
c765369af
|
951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 |
if (this.feeTypeData[i].amount) { feeType.amount = Number(feeType.amount) + Number(this.feeTypeData[i].amount); this.feeType.amount = feeType.amount; this.feeType.subTotal = feeType.amount; this.feeTypeData[i].subTotal = this.feeTypeData[i].amount; } else if (this.feeTypeData[0].amount == "") { this.feeType.amount = "0.00"; this.feeTypeData[i].subTotal = "0.00"; this.feeType.subTotal = "0.00"; } else if (this.feeTypeData[i].amount == "") { this.feeType.amount = Number(feeType.amount) + Number(this.feeTypeData[i].amount); this.feeTypeData[i].subTotal = Number(feeType.amount) + Number(this.feeTypeData[i].amount); this.feeType.subTotal = Number(feeType.amount) + Number(this.feeTypeData[i].amount); } |
687e0b929
|
969 |
// *********** DISCOUNT *********** |
de5a79260
|
970 |
if (this.feeTypeData[i].discount) { |
ff30cbe86
|
971 972 973 |
if ( Number(this.feeTypeData[i].discount) < this.feeTypeData[i].amount ) { |
11f495070
|
974 975 976 977 |
feeType.discount = Number(feeType.discount) + Number(this.feeTypeData[i].discount); this.feeType.discount = feeType.discount; feeType.subParticularTotal = |
ff30cbe86
|
978 |
this.feeTypeData[i].amount - this.feeTypeData[i].discount; |
11f495070
|
979 980 981 |
this.feeTypeData[i].subTotal = feeType.subParticularTotal.toFixed( 2 ); |
ff30cbe86
|
982 983 984 985 |
} else if ( Number(this.feeTypeData[i].discount) >= this.feeTypeData[i].amount ) { this.feeTypeData[i].discount = this.feeTypeData[i].amount; |
11f495070
|
986 987 988 989 |
feeType.discount = Number(feeType.discount) + Number(this.feeTypeData[i].discount); this.feeType.discount = feeType.discount.toString(); feeType.subParticularTotal = |
ff30cbe86
|
990 |
this.feeTypeData[i].amount - this.feeTypeData[i].discount; |
11f495070
|
991 992 993 994 |
this.feeTypeData[ i ].subTotal = feeType.subParticularTotal.toString(); } |
c765369af
|
995 996 |
} else if (this.feeTypeData[0].discount == "") { this.feeType.discount = "0.00"; |
de5a79260
|
997 |
} |
ff30cbe86
|
998 999 1000 1001 |
// else if (this.feeTypeData[i].discount == "") { // this.feeType.discount = // Number(feeType.discount) + Number(this.feeTypeData[i].discount); // } |
687e0b929
|
1002 1003 |
// *********** SUBTOTAL *********** |
c765369af
|
1004 1005 1006 1007 1008 |
if (this.feeTypeData[i].subTotal) { feeType.subTotal = Number(feeType.subTotal) + Number(this.feeTypeData[i].subTotal); this.feeType.subTotal = feeType.subTotal.toFixed(2); } |
687e0b929
|
1009 1010 |
// *********** PAID-AMOUNT *********** |
de5a79260
|
1011 1012 1013 1014 |
if (this.feeTypeData[i].paidAmount) { feeType.paidAmount = Number(feeType.paidAmount) + Number(this.feeTypeData[i].paidAmount); this.feeType.paidAmount = feeType.paidAmount.toFixed(2); |
c765369af
|
1015 1016 1017 1018 1019 |
} else if (this.feeTypeData[0].paidAmount == "") { this.feeType.paidAmount = "0.00"; } else if (this.feeTypeData[i].paidAmount == "") { this.feeType.paidAmount = feeType.paidAmount = Number(feeType.paidAmount) + Number(this.feeTypeData[i].paidAmount); |
de5a79260
|
1020 |
} |
c765369af
|
1021 |
|
d9bb52b5b
|
1022 1023 1024 1025 1026 |
// if paid Amount fill large of subtotal value so this condition are fixed filled subtotal value. if (feeType.paidAmount > feeType.subTotal) { this.feeTypeData[i].paidAmount = this.feeTypeData[i].subTotal; this.feeType.paidAmount = feeType.subTotal; } |
687e0b929
|
1027 1028 1029 1030 1031 |
} }, getPayMethodList() { if (this.invoiceData.paymentStatus == "PARTIALLY_PAID") { this.showPayMethods = true; |
728b5d417
|
1032 |
this.paymentMethodRules = [v => !!v || "Payment Method is required"]; |
687e0b929
|
1033 1034 |
} else if (this.invoiceData.paymentStatus == "FULLY_PAID") { this.showPayMethods = true; |
728b5d417
|
1035 |
this.paymentMethodRules = [v => !!v || "Payment Method is required"]; |
c765369af
|
1036 1037 1038 1039 1040 |
} else if (this.invoiceData.paymentStatus == "NOT_PAID") { for (let i = 0; i < this.feeTypeData.length; i++) { this.feeTypeData[i].paidAmount = "0.00"; this.feeType.paidAmount = "0.00"; } |
728b5d417
|
1041 1042 |
this.paymentMethodRules = ""; this.showPayMethods = false; |
879451281
|
1043 1044 1045 1046 |
} else { this.showPayMethods = false; } }, |
d45ffc6fa
|
1047 |
selectAllStudent() { |
d45ffc6fa
|
1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 |
this.invoiceData.students = []; if (this.invoiceData.studentId === "Select All") { for (let i = 1; i < this.studentList.length; i++) { this.invoiceData.students.push(this.studentList[i]._id); console.log("data", this.invoiceData.students); // data.push(this.studentList[i]._id); // console.log("data", data); } } else { this.invoiceData.students.push(this.invoiceData.studentId); } |
68d742034
|
1059 1060 |
}, displaySearch() { |
c765369af
|
1061 1062 |
this.show = false; this.showSearch = true; |
68d742034
|
1063 1064 1065 1066 1067 |
}, closeSearch() { this.showSearch = false; this.show = true; this.search = ""; |
88868752b
|
1068 1069 1070 1071 |
}, updateDoneInvoice() { this.editInvoiceDialog = false; this.getInvoiceList(); |
e03bf1f92
|
1072 1073 1074 1075 1076 1077 1078 |
}, updatePayment() { this.paymentInvoiceDialog = false; this.getInvoiceList(); this.snackbar = true; this.text = "Payment added successfully"; this.color = "green"; |
687e0b929
|
1079 1080 1081 1082 1083 1084 1085 |
} }, mounted() { this.token = this.$store.state.token; this.getInvoiceList(); this.getAllClasses(); this.getfeeType(); |
81d876b5d
|
1086 |
this.getAllStudents(); |
687e0b929
|
1087 1088 1089 1090 1091 1092 |
} }; </script> <style scoped> |
687e0b929
|
1093 1094 1095 1096 1097 1098 |
table { border-collapse: collapse; border: 1px solid #e2e7eb; } th, |
68d742034
|
1099 |
.tdFeeType { |
687e0b929
|
1100 1101 1102 1103 1104 1105 1106 1107 |
border: 1px solid #e2e7eb; padding: 10px; text-align: center; } table.feeTypeTable { table-layout: auto !important; width: 100% !important; } |
00e0f1a63
|
1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 |
.card-style { background: #7f62f8 !important; border-color: #7f62f8 !important; border-radius: 12px; text-align: center !important; padding-top: 10px !important; } .add-button { background: #feb83c !important; border-color: #feb83c !important; text-transform: none !important; -webkit-box-shadow: none !important; box-shadow: none !important; } .clear-button { background: #fa7676 !important; border-color: #fa7676 !important; text-transform: none !important; -webkit-box-shadow: none !important; box-shadow: none !important; } .card-styles { background: #7f62f8 !important; border-color: #7f62f8 !important; } .v-card__actions .v-btn { margin: 0 15px !important; min-width: 96px !important; } |
687e0b929
|
1137 |
</style> |