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