diff --git a/src/app/@theme/components/header/header.component.ts b/src/app/@theme/components/header/header.component.ts index 2244a79..50a9d4a 100644 --- a/src/app/@theme/components/header/header.component.ts +++ b/src/app/@theme/components/header/header.component.ts @@ -50,7 +50,8 @@ export class HeaderComponent implements OnInit, OnDestroy { } ngOnInit() { - this.userName = localStorage.getItem('user_role') + + this.userName = localStorage.getItem('user_name') this.currentTheme = this.themeService.currentTheme; console.log(this.userService) diff --git a/src/app/pages/auth/forgot-password/forgot-password.component.html b/src/app/pages/auth/forgot-password/forgot-password.component.html index a0b5d0c..6d3639d 100644 --- a/src/app/pages/auth/forgot-password/forgot-password.component.html +++ b/src/app/pages/auth/forgot-password/forgot-password.component.html @@ -1,5 +1,5 @@

Forgot Password

-

Enter your email address and we’ll send a link to reset your password

+

Enter your email address and we’ll send a OTP to reset your password

+
Password does not match the confirm password.
diff --git a/src/app/pages/customer/customer-form/customer-form.component.html b/src/app/pages/customer/customer-form/customer-form.component.html index 948fcfd..dc8e5de 100644 --- a/src/app/pages/customer/customer-form/customer-form.component.html +++ b/src/app/pages/customer/customer-form/customer-form.component.html @@ -25,12 +25,15 @@
- + +
+ Password length must be greater than or equal to 8 +
- - + +
diff --git a/src/app/pages/customer/customer.component.ts b/src/app/pages/customer/customer.component.ts index 8023928..8a6f512 100644 --- a/src/app/pages/customer/customer.component.ts +++ b/src/app/pages/customer/customer.component.ts @@ -147,9 +147,9 @@ export class CustomerComponent { console.log(res) this.getuserlistApi(); if(event.isActive == 1){ - this.showToast('success', 'Data Removed Successfully', 'Active Customer Data Completed..!'); + this.showToast('success', 'Active Customer Data Completed..!', ''); }else{ - this.showToast('success', 'Data Removed Successfully', 'Inactive Customer Data Completed..!'); + this.showToast('success', 'Inactive Customer Data Completed..!', ''); } //this.showToast('success', 'Data Removed Successfully', 'Removed User Data Completed..!'); diff --git a/src/app/pages/dashboard/dashboard.component.html b/src/app/pages/dashboard/dashboard.component.html index e4d9980..093e3ba 100644 --- a/src/app/pages/dashboard/dashboard.component.html +++ b/src/app/pages/dashboard/dashboard.component.html @@ -6,7 +6,7 @@
-
Dashboard
+
Dashboard (Last 7 Days)
@@ -18,7 +18,7 @@
- Orders + Pending Orders
diff --git a/src/app/pages/driver/driver-form/driver-form.component.html b/src/app/pages/driver/driver-form/driver-form.component.html index 48387f5..9241443 100644 --- a/src/app/pages/driver/driver-form/driver-form.component.html +++ b/src/app/pages/driver/driver-form/driver-form.component.html @@ -16,14 +16,14 @@ Please enter a valid email address
- - + + - +
+ Password length must be greater than or equal to 8 +
Password is required
diff --git a/src/app/pages/driver/driver-form/driver-form.component.ts b/src/app/pages/driver/driver-form/driver-form.component.ts index a61c9da..901d06f 100644 --- a/src/app/pages/driver/driver-form/driver-form.component.ts +++ b/src/app/pages/driver/driver-form/driver-form.component.ts @@ -32,10 +32,13 @@ export class DriverFormComponent implements OnInit { '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,63}$', )]), // password: new FormControl('', [Validators.required, Validators.minLength(6)]), - password: new FormControl('', [Validators.required]), + password: new FormControl('', [Validators.required,Validators.pattern( + '^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#$%^&*_=+-]).{8,16}$' + )]), }); if(this.data.hasOwnProperty('id')){ + delete this.data.password this.userForm.controls['password'].clearValidators(); this.userForm.controls['password'].updateValueAndValidity(); } @@ -55,13 +58,23 @@ export class DriverFormComponent implements OnInit { this.formData= new FormData(); if(this.data.hasOwnProperty('id')){ this.formData.append('id', this.data.id); - - } - this.formData.append('userName',tmp.userName) - this.formData.append('email', tmp.email); - this.formData.append('password', tmp.password); - this.formData.append('role', 'DRIVER'); - this.formData.append('mobileNo', tmp.mobileNo); + this.formData.append('userName',tmp.userName) + this.formData.append('email', tmp.email); + if(tmp.password != ""){ + this.formData.append('password', tmp.password); + } + + this.formData.append('role', 'DRIVER'); + this.formData.append('mobileNo', tmp.mobileNo); + } else{ + + this.formData.append('userName',tmp.userName) + this.formData.append('email', tmp.email); + this.formData.append('password', tmp.password); + this.formData.append('role', 'DRIVER'); + this.formData.append('mobileNo', tmp.mobileNo); + } + this._api.addUserFormDetails (this.formData).subscribe(res => { if (res.status == 200) { diff --git a/src/app/pages/driver/driver.component.html b/src/app/pages/driver/driver.component.html index 3f40c39..15cd1e1 100644 --- a/src/app/pages/driver/driver.component.html +++ b/src/app/pages/driver/driver.component.html @@ -144,8 +144,9 @@ --> - - + +
diff --git a/src/app/pages/driver/driver.component.ts b/src/app/pages/driver/driver.component.ts index 69c370e..cb4982b 100644 --- a/src/app/pages/driver/driver.component.ts +++ b/src/app/pages/driver/driver.component.ts @@ -105,9 +105,9 @@ export class DriverComponent { console.log(res) this.getuserlistApi(); if(event.isActive == 1){ - this.showToast('success', 'Data Removed Successfully', 'Active Driver Data Completed..!'); + this.showToast('success', 'Active Driver Data Completed..!', ''); }else{ - this.showToast('success', 'Data Removed Successfully', 'Inactive Driver Data Completed..!'); + this.showToast('success', 'Inactive Driver Data Completed..!', ''); } //this.showToast('success', 'Data Removed Successfully', 'Removed Driver Data Completed..!'); }else{ diff --git a/src/app/pages/drivery-sheet/drivery-sheet.component.html b/src/app/pages/drivery-sheet/drivery-sheet.component.html index 7249c23..ccf44d8 100644 --- a/src/app/pages/drivery-sheet/drivery-sheet.component.html +++ b/src/app/pages/drivery-sheet/drivery-sheet.component.html @@ -24,8 +24,11 @@
-
-
+
+ + + + + Select Drivers + + {{user.userName }} + + + + + + +
- - Select Drivers - - {{user.userName }} - - - +
- -
+ +
No Data Found For Selected Driver
vnms @@ -74,7 +88,7 @@
-
https://vnms.in/services/
+
Driver Name: {{driverName}}
Delivery Sheet
@@ -106,7 +120,7 @@ [sortable]="false" [title]="'Order ID'" [filterable]="false" - [width]="4"> + [width]="3"> @@ -115,19 +129,19 @@ [sortable]="false" [title]="'Customer'" [filterable]="false" - [width]="4"> + [width]="5"> -
+
- {{row.item['OrderDetails.CusDetails.cusName']}}
- {{row.item['OrderDetails.CusDetails.address_1']}}
- {{row.item['OrderDetails.CusDetails.city']}}
- {{row.item['OrderDetails.CusDetails.pincode']}}
+ {{row.item.cusName}}
+ {{row.item.address_1}}
+ {{row.item.city}}
+ {{row.item.pincode}}
- ph:- {{row.item['OrderDetails.CusDetails.phoneNo']}} + ph:- {{row.item.phoneNo}}
diff --git a/src/app/pages/drivery-sheet/drivery-sheet.component.ts b/src/app/pages/drivery-sheet/drivery-sheet.component.ts index 161dcf9..7ae74eb 100644 --- a/src/app/pages/drivery-sheet/drivery-sheet.component.ts +++ b/src/app/pages/drivery-sheet/drivery-sheet.component.ts @@ -20,13 +20,13 @@ export class DriverySheetComponent implements OnInit { // moment().subtract(1, 'month').endOf('month') // ] - };productDeatils:any =[]; DateDisplay:any =[]; + };productDeatils:any =[]; DateDisplay:any =[];driverName:any =[]; selectDate:any =[]; driverId:any =[]; selectedDateRange:any =[];drivers:any =[];summaryaData:any=[];driverval:any=[];returnSummary:any =[]; constructor(public _api:PageapiService, private router:Router) { } ngOnInit(): void { - this.selectedDateRange =[]; - console.log(moment()['_d']) + // this.selectedDateRange =[]; + // console.log(moment()['_d']) this.getDriverlistApi() this.DateDisplay = moment()['_d'] @@ -107,67 +107,68 @@ export class DriverySheetComponent implements OnInit { } val(data){ - console.log(data.id) + console.log(data) + this.driverName = data.userName - let result; - if(this.selectedDateRange.length != 0){ - result= this.selectedDateRange.endDate['$d'] - }else{ + let result; + // if(this.selectedDateRange.length != 0){ + // result= this.selectedDateRange.endDate['$d'] + // }else{ - result = moment()['_d'] - } + result = this.selectDate + // } this.DateDisplay = result - + this.driverId = data.id console.log(result) - let param ={date:new Date(result),id:data.id} - this._api.getDriverSheet(param).subscribe(res => { - console.log(res) - if(res.status == 200){ + // let param ={date:new Date(result),id:data.id} + // this._api.getDriverSheet(param).subscribe(res => { + // console.log(res) + // if(res.status == 200){ - console.log(res.data) + // console.log(res.data) - this.summaryaData = res.data - this.summaryaData.forEach(element => { - element.name = element['UserDetails.userName'] + // this.summaryaData = res.data + // this.summaryaData.forEach(element => { + // element.name = element['UserDetails.userName'] - }); + // }); - this.mergeOrders( this.summaryaData) + // this.mergeOrders( this.summaryaData) - }else{ - this.summaryaData =[]; - } - }) + // }else{ + // this.summaryaData =[]; + // } + // }) - this._api.getReturnDriverSummaryListadmin(param).subscribe(res => { - console.log(res) - if(res.status == 200){ + // this._api.getReturnDriverSummaryListadmin(param).subscribe(res => { + // console.log(res) + // if(res.status == 200){ - console.log(res.data) + // console.log(res.data) - this.returnSummary = res.data + // this.returnSummary = res.data - // this.mergeOrders( this.summaryaData) + // // this.mergeOrders( this.summaryaData) - } - }) + // } + // }) - this._api.getProductDeliverysheet(param).subscribe(res => { - console.log(res) - if(res.status == 200){ + // this._api.getProductDeliverysheet(param).subscribe(res => { + // console.log(res) + // if(res.status == 200){ - console.log(res.data) + // console.log(res.data) - this.productDeatils = res.data + // this.productDeatils = res.data - // this.mergeOrders( this.summaryaData) + // // this.mergeOrders( this.summaryaData) - } - }) + // } + // }) @@ -198,7 +199,7 @@ console.log(result) let order = this.productDeatils.filter(arr=>{return arr.orderId == param}) if(order.length>0){ - console.log(param) + //console.log(param) order.forEach(element => { @@ -260,5 +261,77 @@ var opt = { // New Promise-based usage: html2pdf().from(element).set(opt).save(); } + + generate(){ + + console.log(this.selectDate) + const utcDate = new Date(this.selectDate[0]); + + // Add one day to the UTC date + utcDate.setDate(utcDate.getDate() + 1); + + // Convert the updated date to a UTC string + const updatedUtcDate = utcDate.toISOString(); + console.log(updatedUtcDate) + + let param ={date: updatedUtcDate,id:this.driverId} + this._api.getDriverSheet(param).subscribe(res => { + console.log(res) + if(res.status == 200){ + + console.log(res.data) + + this.summaryaData = res.data + this.summaryaData.forEach(element => { + element.name = element['UserDetails.userName'] + + }); + + this.mergeOrders( this.summaryaData) + + }else{ + this.summaryaData =[]; + } + }) + + this._api.getReturnDriverSummaryListadmin(param).subscribe(res => { + console.log(res) + if(res.status == 200){ + + console.log(res.data) + + this.returnSummary = res.data + + + + // this.mergeOrders( this.summaryaData) + + } + }) + + this._api.getProductDeliverysheet(param).subscribe(res => { + console.log(res) + if(res.status == 200){ + + console.log(res.data) + + this.productDeatils = res.data + + + + // this.mergeOrders( this.summaryaData) + + } + }) + + } + onStartDateChanged(data){ + this.DateDisplay = data + this.selectDate =[]; + this.selectDate.push(data) + //this.selectDate = data + console.log(data) + + } } diff --git a/src/app/pages/order/add-order/add-order.component.html b/src/app/pages/order/add-order/add-order.component.html new file mode 100644 index 0000000..07a741e --- /dev/null +++ b/src/app/pages/order/add-order/add-order.component.html @@ -0,0 +1,93 @@ + + {{heading}} + +
+
+
+ + + +
+
+
+
+ + + + +
+
+
+
+ + + +
+
+ +
+
+ + + + +
+
+ + +
+
+
+
+
+ + + + {{user.productName }}({{user.skuId }} ) + + + + + +
+
+
+
+ + + + +
+
+
+
+ + + +
+
+ +
+
+ + + + + + + + +
+
+ + +
+
+ + + + +
+
+ \ No newline at end of file diff --git a/src/app/pages/order/add-order/add-order.component.scss b/src/app/pages/order/add-order/add-order.component.scss new file mode 100644 index 0000000..a312e65 --- /dev/null +++ b/src/app/pages/order/add-order/add-order.component.scss @@ -0,0 +1,19 @@ +@import '../../../@theme/styles/themes'; + +@include nb-install-component() { + input { + width: 100%; + } + + .cancel { + margin-right: 1rem; + } +} +.custom-dialog-class { + width: 50%; /* Set the desired width here */ + height: 300px; /* Set the desired height here */ + } + .show-grid{ + margin-bottom: 2rem; + } + \ No newline at end of file diff --git a/src/app/pages/order/add-order/add-order.component.spec.ts b/src/app/pages/order/add-order/add-order.component.spec.ts new file mode 100644 index 0000000..fc37f59 --- /dev/null +++ b/src/app/pages/order/add-order/add-order.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AddOrderComponent } from './add-order.component'; + +describe('AddOrderComponent', () => { + let component: AddOrderComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ AddOrderComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(AddOrderComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/order/add-order/add-order.component.ts b/src/app/pages/order/add-order/add-order.component.ts new file mode 100644 index 0000000..592b4d5 --- /dev/null +++ b/src/app/pages/order/add-order/add-order.component.ts @@ -0,0 +1,129 @@ +import { Component, OnInit } from '@angular/core'; +import { NbComponentStatus, NbDialogRef, NbDialogService, NbGlobalPhysicalPosition, NbGlobalPosition, NbToastrService } from '@nebular/theme'; +import { PageapiService } from '../../pageapi.service'; + +@Component({ + selector: 'ngx-add-order', + templateUrl: './add-order.component.html', + styleUrls: ['./add-order.component.scss'] +}) +export class AddOrderComponent implements OnInit { + setData:any =[]; + position: NbGlobalPosition = NbGlobalPhysicalPosition.TOP_RIGHT; + preventDuplicates = false; + status: NbComponentStatus = 'primary'; + index = 1; + destroyByClick = true; + duration = 2000; + hasIcon = true; + + heading:any =[];product:any =[]; inputFieldGroups:any = [{id:'', qty: '1', productSpec: '' }]; orderId:any =[]; + constructor(private toastrService: NbToastrService,private dialogRef: NbDialogRef ,public _api:PageapiService,private dialogService: NbDialogService) { + + + } + + ngOnInit() { + this.heading = "Add Return" + console.log('dialogRef', this.dialogRef.componentRef.instance); +let answer:any = this.dialogRef.componentRef.instance + this.getProductlistApi( answer.details) + } + + + + getProductlistApi(param){ + let data ={type : param} + + this._api.getProducts(data).subscribe(res => { + console.log(res) + if(res.status == 200){ + + let passData = res.data + let product = passData +console.log(product) + product.forEach((element:any, index) => { + element.index = index +1 + element.qty = 0; + element.pId = element.id + + }); + + this.product = product + // this.productfull = product + + // console.log(data) + + }else{ + this.product = []; + } + }) + } + + addInputFieldGroup() { + this.inputFieldGroups.push({id:null, qty: '1', productSpec: '' }); // Add a new input field group to the array + //this.childButtonEvent.emit( this.inputFieldGroups); + } + + removeInputFieldGroup(index: number) { + console.log( this.inputFieldGroups) + this.inputFieldGroups.splice(index, 1); // Remove the input field group at the specified index + //this.childButtonEvent.emit( this.inputFieldGroups); + } + + + cancel(){ + this.dialogRef.close(); + } + + save(){ + + let product= this.inputFieldGroups.filter((arr:any)=>{return arr.qty != 0}) + console.log(product) + + if(product.length>0){ + + + let temp:any =[] + this.orderId = localStorage.getItem('orderId') + let cus = localStorage.getItem('cusId') + let driverId = localStorage.getItem('driverId') + product.forEach((element:any) => { + temp.push({orderId: this.orderId,productId:element.id,cusId:cus,qty:element.qty,driverId:driverId,returnTime:new Date(),createdBy:driverId,cylinderNo:element.productSpec}) + }); + + console.log(temp) + let paramData ={product:temp} + this._api.CreateReturn (paramData).subscribe(async res => { + if (res.status == 200) { +console.log(res) + +this.dialogRef.close(1); + } + }) +}else{ + this.showToast('success', 'Data Changed Successfully', ''); + this.dialogRef.close(); +} + } + + + private showToast(type: NbComponentStatus, title: string, body: string) { + const config = { + status: type, + destroyByClick: this.destroyByClick, + duration: this.duration, + hasIcon: this.hasIcon, + position: this.position, + preventDuplicates: this.preventDuplicates, + }; + const titleContent = title ? ` ${title}` : ''; + + this.index += 1; + this.toastrService.show( + body, + `${titleContent}`, + config); + } + +} diff --git a/src/app/pages/order/order-form/order-form.component.html b/src/app/pages/order/order-form/order-form.component.html index 2f02c52..d386999 100644 --- a/src/app/pages/order/order-form/order-form.component.html +++ b/src/app/pages/order/order-form/order-form.component.html @@ -8,16 +8,18 @@
- - -
@@ -40,6 +42,25 @@ }} +
+
Shipping Information
+
+
+
+ +
+
+
+ +
+
+ +
+
@@ -57,7 +78,30 @@

{{setData.orderId}}


Status
-

({{setData.status}})

+

({{setData.status}})

+ + + Ordered + In Progresss + Out For Delivery + + Delivered + Cancelled + + + + + + + {{user.userName }} + + + +
+ Reason: {{setData.reason}} -
-
- - -
-
-
- -
-
-
- -
-
- -
-
-
@@ -118,7 +131,7 @@
-
+
@@ -131,37 +144,225 @@
- +
- -
-
+ +
+
+ + + + + + +
+
+
+ + + + {{user.productName }}({{user.skuId }} ) + + + + + +
+
+
+
+ + + + +
+
+
+
+ + + +
+
+ +
+
+ + + + + + + + +
+
+ + +
+ +
+
+ +
+ +
-
- - +
+ +
-
- - +
+ +
-
- +
+
- + +
+ + +
+
+
+
Return Information
+
+
+ +
+
+
+ + +
+
+ + + + + + +
+
+
+ + + +
+
+
+
+ +
+ + + + +
+
+
+
+ + +
+
+ +
+
+ + + + + +
+ +
+ +
+ +
+
+ + +
+
+ + + + + + +
+
+
+ + + + +
+
+
+
+ +
+ + + + +
+
+
+
+ + +
+
+ +
+
+ + + + + + +
+
+ + +
+ +
+
@@ -183,7 +384,7 @@
- +
diff --git a/src/app/pages/order/order-form/order-form.component.ts b/src/app/pages/order/order-form/order-form.component.ts index ed3bbff..9e03c2b 100644 --- a/src/app/pages/order/order-form/order-form.component.ts +++ b/src/app/pages/order/order-form/order-form.component.ts @@ -1,12 +1,14 @@ import { Component, OnInit } from '@angular/core'; import { PageapiService } from '../../pageapi.service'; -import { NbComponentStatus, NbGlobalPhysicalPosition, NbGlobalPosition, NbToastrService, NbWindowControlButtonsConfig, NbWindowRef, NbWindowService } from '@nebular/theme'; +import { NbComponentStatus, NbDialogService, NbGlobalPhysicalPosition, NbGlobalPosition, NbToastrService, NbWindowControlButtonsConfig, NbWindowRef, NbWindowService } from '@nebular/theme'; import { SmartTableData } from '../../../@core/data/smart-table'; import { OrderSummaryFormComponent } from '../order-summary-form/order-summary-form.component'; import { ActivatedRoute, Router } from '@angular/router'; import pdfMake from "pdfmake/build/pdfmake"; import pdfFonts from "pdfmake/build/vfs_fonts"; +import { log } from 'console'; +import { AddOrderComponent } from '../add-order/add-order.component'; pdfMake.vfs = pdfFonts.pdfMake.vfs; class Product{ name: string; @@ -29,7 +31,7 @@ class Invoice{ }) export class OrderFormComponent implements OnInit { customer:any =[]; - product:any =[]; + product:any =[];ResultDisplay:any =[]; mixedGas:any =[];productfull:any=[]; selectCustomer:any =""; items = [ @@ -42,7 +44,7 @@ fieldTitle:any =' New Order' maximize = false; fullScreen = true; close = true; - formData:any=[] + formData:any=[];productlistReturn:any =[]; index = 1; destroyByClick = true; duration = 2000; @@ -50,17 +52,18 @@ fieldTitle:any =' New Order' setData:any =[]; position: NbGlobalPosition = NbGlobalPhysicalPosition.TOP_RIGHT; preventDuplicates = false; - status: NbComponentStatus = 'primary'; - selectCustomerData :any =[]; + status: NbComponentStatus = 'primary'; + inputFieldGroups:any = [{id:'', qty: '1', productSpec: '' }]; + selectCustomerData :any =[];selectStatus:any =[];CancelReason:any =[];selectDriver:any =[];drivers:any =[]; invoice = new Invoice(); - constructor(private route :ActivatedRoute,private router: Router,public _api:PageapiService,private toastrService: NbToastrService,private service: SmartTableData ,private windowService: NbWindowService) { + constructor(private dialogService: NbDialogService,private route :ActivatedRoute,private router: Router,public _api:PageapiService,private toastrService: NbToastrService,private service: SmartTableData ,private windowService: NbWindowService) { this._api.orderDetails_observable$.subscribe((res) => { console.log('booked', res); if(res){ this. setData = res - + this.selectStatus = res.status // res.name = res.productName // res.qty = parseInt(res.qty) // res.price = this.setData['OrderDetails.CusDetails.cusType'] @@ -92,11 +95,13 @@ fieldTitle:any =' New Order' }); this.mixedGas = tmp2 console.log(tmp2) + } receiveAutoMsgHandler(p) { console.log(p) } - ngOnInit(): void { + ngOnInit() { + this.getDriverlistApi() console.log(this.setData) if(this.setData != undefined){ @@ -112,6 +117,10 @@ fieldTitle:any =' New Order' } } this.getuserlistApi() + + + + } @@ -132,6 +141,8 @@ fieldTitle:any =' New Order' console.log(customer) this.customer = customer if( Object.keys(this.setData).length != 0){ + localStorage.setItem('cusId', this.setData['OrderDetails.CusDetails.id']) + localStorage.setItem('driverId',this.setData.driverId) this.selectCustomer = this.setData['OrderDetails.CusDetails.cusName'] this.invoice.customerName = this.selectCustomer this.invoice.address = this.setData['OrderDetails.CusDetails.address_1'] @@ -146,6 +157,19 @@ fieldTitle:any =' New Order' this.getProductlistApi( this.setData['OrderDetails.CusDetails.cusType']) this.getProductlistApi2( this.setData['OrderDetails.CusDetails.cusType']) console.log( this.setData['OrderDetails.CusDetails.cusType']) + + localStorage.setItem('orderId',this.setData.orderId) + + this._api.getReturnProductListSummary({orderId:this.setData.orderId}).subscribe(res => { + console.log(res) + if(res.status == 200){ + + this.productlistReturn = res.data + + + + } + }) } } }) @@ -200,6 +224,8 @@ console.log(product) let product = passData this.productfull = product + + // console.log(data) @@ -260,6 +286,102 @@ console.log(product) + let passData = {name:this.selectCustomer,product:results,customerData:this.selectCustomerData} + + const windowRef: NbWindowRef = this.windowService.open(OrderSummaryFormComponent, { title: ` Order Summary (`+this.selectCustomer+`)`, context:passData,buttons: buttonsConfig , }); + + + + // Subscribe to the afterClosed event + windowRef.onClose.subscribe((data) => { + // Handle the window closure + console.log(data); + if(data == 1){ + this.showToast('success', 'Data Saved Successfully', 'New Order Placed..!'); + // this.getuserlistApi(); + setTimeout(() => { + this.router.navigate(['../'], { relativeTo: this.route }); + }, 500); + console.log('Window closed 123'); + }else if(data == 0){ + this.showToast('warning', 'Somthing is Wrong...!', 'Order Placed Failed..!'); + } + }); + }else{ + this.showToast('warning', 'Please Fill Request Fields...!', ''); + } + } + + + saveNew(){ + + console.log(this.selectCustomer,this.inputFieldGroups, this.product) + + this.inputFieldGroups.forEach((element:any) => { + + + this.product.forEach(e => { + + +if(e.id === element.id){ + element.name = e.productName + + +} +}); + +}); +console.log( this.inputFieldGroups ) +this.invoice.products =[]; +// this.inputFieldGroups.forEach((res:any) => { + + +// res.name = res.name +// res.qty = res.qty +// res.price = this.setData['OrderDetails.CusDetails.cusType'] +// this.invoice.additionalDetails = 'https://vnms.in/services/' + +// this.invoice.products.push(res) + + + + +// }) + + let mixProd= this.inputFieldGroups.filter((arr:any)=>{return arr.qty != 0}) + + +// if(this.setData != undefined){ + + +// if( Object.keys(this.setData).length != 0){ +// product.forEach(element => { +// element.productSpec = this. setData.productSpec + +// }); +// } +// } + + + const buttonsConfig: NbWindowControlButtonsConfig = { + minimize: this.minimize, + maximize: this.maximize, + fullScreen: this.fullScreen, + close: this.close, + }; + let config= { + hasBackdrop: true, + width: '500px', + height: '300px', + } + + + let results = [ ...this.mixedGas, ...mixProd]; + + if(results.length>0){ + + + let passData = {name:this.selectCustomer,product:results,customerData:this.selectCustomerData} const windowRef: NbWindowRef = this.windowService.open(OrderSummaryFormComponent, { title: ` Order Summary (`+this.selectCustomer+`)`, context:passData,buttons: buttonsConfig , }); @@ -309,6 +431,36 @@ console.log(product) generatePDF(action = 'open') { + this.inputFieldGroups.forEach((element:any) => { + + + this.productfull.forEach(e => { + + + if(e.id === element.id){ + element.name = e.productName +"-("+e.skuId+")" + + + } + }); + + }); + console.log( this.inputFieldGroups ) + this.invoice.products =[]; + this.inputFieldGroups.forEach((res:any) => { + + + res.name = res.name + res.qty = parseInt(res.qty) + res.price = this.setData['OrderDetails.CusDetails.cusType'] + this.invoice.additionalDetails = 'https://vnms.in/services/' + + this.invoice.products.push(res) + + + + + }) this.invoice.products = this.invoice.products.filter(arr=>{return arr.qty != 0}) let docDefinition = { content: [ @@ -348,6 +500,10 @@ console.log(product) { text: this.invoice.contactNo } ], [ + { + text: `SALES ORDER`, + alignment: 'right' + }, { text: `Date: ${new Date(this.setData.createdAt).toLocaleString()}`, alignment: 'right' @@ -384,18 +540,18 @@ console.log(product) ] } }, + // { + // text: 'Additional Details', + // style: 'sectionHeader' + // }, { - text: 'Additional Details', - style: 'sectionHeader' - }, - { - text: this.invoice.additionalDetails, + text: '', margin: [0, 0 ,0, 15] }, { columns: [ - [{ qr: `${this.invoice.customerName}`, fit: '50' }], - [{ text: 'Signature', alignment: 'right', italics: true}], + // [{ qr: `${this.invoice.customerName}`, fit: '50' }], + // [{ text: 'Signature', alignment: 'right', italics: true}], ] }, { @@ -404,9 +560,9 @@ console.log(product) }, { ul: [ - 'Order can be return in max 10 days.', - 'Warrenty of the product will be subject to the manufacturer terms and conditions.', - 'This is system generated invoice.', + 'Order once placed cannot be changed . Please contact VNMS for any queries.', + 'Delivery of the product will be subject to the manufacturer terms and conditions.', + 'This is a system generated sales order.', ], } ], @@ -421,7 +577,9 @@ console.log(product) }; if(action==='download'){ - pdfMake.createPdf(docDefinition).download(); + + let name= this.selectCustomer+"-"+this.setData.orderId + pdfMake.createPdf(docDefinition).download(name); }else if(action === 'print'){ pdfMake.createPdf(docDefinition).print(); @@ -443,27 +601,44 @@ console.log(product) if(res.status == 200){ let result = res.data + +this.ResultDisplay = result +console.log(result) + this.inputFieldGroups =[]; + +// setTimeout(() => { + + +result.forEach(element => { + + this.inputFieldGroups.push({id:parseInt(element.productId ) , qty: element.qty, productSpec: element.productSpec , primaryId:element.id}) + + +}) +// }, 1000); +console.log( this.inputFieldGroups); + result.forEach(element => { console.log(element) if(element.ProductDetails.length>0){ - if(element.ProductDetails[0].productName =="Mixed Gas"){ - console.log("hiiii") - element.name = element.ProductDetails[0].productName - element.qty = parseInt(element.qty) - element.price = this.setData['OrderDetails.CusDetails.cusType'] - this.invoice.products.push(element) - } + // if(element.ProductDetails[0].productName =="Mixed Gas"){ + // console.log("hiiii") + // element.name = element.ProductDetails[0].productName + // element.qty = parseInt(element.qty) + // element.price = this.setData['OrderDetails.CusDetails.cusType'] + // this.invoice.products.push(element) + // } } }); -this.product.forEach(element => { +// this.product.forEach(element => { - delete element.id +// delete element.id -}) +// }) this.product.forEach(element => { result.forEach(e => { @@ -472,19 +647,20 @@ this.product.forEach(element => { if(element.productName == e.ProductDetails[0].productName ){ //id: 110 element.productId= element.id - element.id = e.id + // element.id = e.id element.qty = parseInt(e.qty) - } + } } }); }); +console.log(this.product) } const uniqueArray = this.invoice.products.filter((obj:any, index, self) => index === self.findIndex((o:any) => o.id === obj.id) ); -this.invoice.products = uniqueArray +//this.invoice.products = uniqueArray console.log(this.product,this.invoice.products) }) @@ -496,7 +672,7 @@ this.invoice.products = uniqueArray res.price = this.setData['OrderDetails.CusDetails.cusType'] this.invoice.additionalDetails = 'https://vnms.in/services/' - this.invoice.products.push(res) + // this.invoice.products.push(res) @@ -531,4 +707,167 @@ cancelData(){ } console.log(this.fieldTitle) } + +getDriverlistApi(){ + let param ={} + this._api.getusers(param).subscribe(res => { + console.log(res) + if(res.status == 200){ + + let passData = res.data + let driver = passData.filter(arr=>{return arr.role == 'DRIVER'}) + driver.sort((a: any, b: any) => { + return b.id - a.id; + }); + driver.forEach((element:any, index) => { + element.index = index +1 + + }); + + + + this.drivers = driver + if(this.setData != undefined){ + if( Object.keys(this.setData).length != 0){ + this.selectDriver = parseInt(this.setData.driverId) + console.log( this.drivers) + }} + } + }) +} + +onSubmit2(){ + + + + console.log( this.selectDriver,this.selectStatus) + let tmp=[]; + + + + if(this.selectStatus == "Out For Delivery"){ + tmp.push({orderId:this.setData.orderId , driverId:this.selectDriver, status:this.selectStatus }) + }else if(this.selectStatus == "Cancelled"){ + tmp.push({orderId:this.setData.orderId , reason:this.CancelReason, status:this.selectStatus }) + }else{ + tmp.push({orderId:this.setData.orderId , status:this.selectStatus }) + } + + if(this.selectStatus == "Delivered"){ + +this.onCreateConfirm() + + }else{ + + let param ={driver:tmp,orderId:this.setData.orderId} + + + + + + + + this._api.CreateOrder (param).subscribe(res => { + if (res.status == 200) { + console.log(res) + this.showToast('success', 'Updated Successfully', ''); + + this.selectStatus =[]; + }else{ + this.showToast('warning', 'Somthing is Wrong...!', ''); + } + }) + + } + + + + +// let param ={driver:tmp,orderId:this.setData.orderId} + + + + + + + +// this._api.CreateOrder (param).subscribe(res => { +// if (res.status == 200) { +// console.log(res) +// this.showToast('success', 'Data Changed Successfully', ''); + +// this.selectStatus =[]; +// }else{ +// this.showToast('warning', 'Somthing is Wrong...!', ''); +// } +// }) + +} + +addInputFieldGroup() { + this.inputFieldGroups.push({id:null, qty: '0', productSpec: '' }); // Add a new input field group to the array + //this.childButtonEvent.emit( this.inputFieldGroups); +} + +removeInputFieldGroup(index: number) { + console.log( this.inputFieldGroups) + this.inputFieldGroups.splice(index, 1); // Remove the input field group at the specified index + //this.childButtonEvent.emit( this.inputFieldGroups); +} + + +onCreateConfirm() { + let data:any = {details:this.setData['OrderDetails.CusDetails.cusType'],action:'Add',title:'Add Return'} + const dialogRef = this.dialogService.open(AddOrderComponent, { + hasBackdrop: true, + dialogClass: 'custom-dialog-class', // Add your custom CSS class here + context: data + }); + + dialogRef.onClose.subscribe((result) => { + // Execute custom logic when the dialog is closed + console.log(result); + if(result == 1){ + console.log( this.selectDriver,this.selectStatus) + let tmp=[]; + + + + if(this.selectStatus == "Out For Delivery"){ + tmp.push({orderId:this.setData.orderId , driverId:this.selectDriver, status:this.selectStatus }) + }else if(this.selectStatus == "Cancelled"){ + tmp.push({orderId:this.setData.orderId , reason:this.CancelReason, status:this.selectStatus }) + }else{ + tmp.push({orderId:this.setData.orderId , status:this.selectStatus }) + } + + let param ={driver:tmp,orderId:this.setData.orderId} + + + + + + + + this._api.CreateOrder (param).subscribe(res => { + if (res.status == 200) { + console.log(res) + this.showToast('success', 'Updated Successfully', ''); + + this.selectStatus =[]; + }else{ + this.showToast('warning', 'Somthing is Wrong...!', ''); + } + }) + // this.showToast('success', 'Data Saved Successfully', ''); + // this.toastrService.success('Entity Added Successfully','Entity'); + console.log('Window closed 123'); + }else if(result == 0){ + + this.showToast('warning', 'Somthing is Wrong...!', ''); + // this.toastrService.success('Somthing is Wrong...!', 'Add Entity Failed..!'); + } + }); + +} } diff --git a/src/app/pages/order/order-summary-form/order-summary-form.component.html b/src/app/pages/order/order-summary-form/order-summary-form.component.html index 4b9f090..cfc9ea8 100644 --- a/src/app/pages/order/order-summary-form/order-summary-form.component.html +++ b/src/app/pages/order/order-summary-form/order-summary-form.component.html @@ -31,7 +31,7 @@
- {{ item.productName }} + {{ item.name }}
diff --git a/src/app/pages/order/order-summary-form/order-summary-form.component.ts b/src/app/pages/order/order-summary-form/order-summary-form.component.ts index 559785a..bcfd60d 100644 --- a/src/app/pages/order/order-summary-form/order-summary-form.component.ts +++ b/src/app/pages/order/order-summary-form/order-summary-form.component.ts @@ -41,6 +41,18 @@ export class OrderSummaryFormComponent implements OnInit { console.log(this.data,this.setData) let cus = this.data.customerData['CusDetails.id'] let role = localStorage.getItem('user_role') + this.data.product.forEach(element => { + element.productName = element.name + + if(element.hasOwnProperty('primaryId')){ + element.id = element.primaryId + }else{ + element.pid = element.id + element.productId = element.id + delete element.id + + } +}); let param; if(this.setData != undefined){ if(this.setData.hasOwnProperty('id')){ diff --git a/src/app/pages/order/order.component.html b/src/app/pages/order/order.component.html index fce8c8e..5b05625 100644 --- a/src/app/pages/order/order.component.html +++ b/src/app/pages/order/order.component.html @@ -2,7 +2,7 @@
-
+
Order Management
@@ -12,7 +12,10 @@ - + + +
-
+
- + + +
@@ -66,7 +73,8 @@ [selectMode]="'multi'" [minContentHeight]="350" [selectMode]="'multi'" - + [selectOnRowClick]="true" + [limit]="25" > @@ -79,7 +87,14 @@ - + +
+ + +
+ + +
@@ -113,7 +128,17 @@ [title]="'Order ID'" [filterable]="false" [width]="4"> - + + +
+ + + {{row.item.orderId }} + +
+ + +
- + + + +
+ + + {{row.item.customer }} + +
+ + +
- + + +
+ + + {{row.item.address }} + +
+ + +
- +
@@ -170,7 +216,7 @@ - +
{{row.item.status}}

({{row.item['UserDetails.userName']}})

@@ -194,7 +240,7 @@ --> - - -
+ +
- - +
- + --> @@ -242,51 +275,60 @@ -
+
- Select All + Select All
-
+
- + + + Ordered + In Progresss + Out For Delivery + + + Cancelled + + - - Select Drivers + +
+
+ +
+
+ + - {{user.userName }} -
-
-
-
-
- -
+
- + \ No newline at end of file diff --git a/src/app/pages/order/order.component.ts b/src/app/pages/order/order.component.ts index 6d3fc85..118ed34 100644 --- a/src/app/pages/order/order.component.ts +++ b/src/app/pages/order/order.component.ts @@ -25,6 +25,24 @@ interface Item { index: number; } +import pdfMake from "pdfmake/build/pdfmake"; +import pdfFonts from "pdfmake/build/vfs_fonts"; +import { log } from 'console'; +pdfMake.vfs = pdfFonts.pdfMake.vfs; +class Product{ + name: string; + price: string; + qty: number; +} +class Invoice{ + customerName: string; + address: string; + contactNo: number; + email: string; + + products: Product[] = []; + additionalDetails: string; +} @Component({ selector: 'ngx-order', templateUrl: './order.component.html', @@ -52,9 +70,11 @@ export class OrderComponent { status: NbComponentStatus = 'primary'; driverForm:any =[]; singleRow:any =[]; - - filteredItems: any[]; + selectStatus:any =[]; + filteredItems: any[];selectDriver:any=[];CancelReason:any =[];ordersArray:any =[]; searchTerm: string; + defaultStartDate: Date; + defaultEndDate: Date; ranges: any = { 'Today': [moment(), moment()], 'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')], @@ -65,11 +85,14 @@ export class OrderComponent { moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month') ] - }; + }; invoice = new Invoice(); selectedDateRange: {startDate: moment.Moment, endDate: moment.Moment}; + + logo:any ='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAC7gAAAQWCAYAAACkS/UOAAAACXBIWXMAAC4jAAAuIwF4pT92AAAL5WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIiB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDE5LTA0LTI1VDE3OjE3OjE5KzA1OjMwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDE5LTA2LTI3VDE3OjE5OjIzKzA1OjMwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAxOS0wNi0yN1QxNzoxOToyMyswNTozMCIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo0OTRkMjgzNC1lMWJjLTViNGQtOGVjNS1jNGZlNTRjMzQ2ZjEiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo2NDdmMDIwOS1kYzIyLTRjNGUtYmI1Yy0yM2Y5Y2JlYzAxNmUiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDozOGRmYzU2NC02Njk1LWFiNDctYmUyNy00ZTI2ZWNmYTUwMDEiIHRpZmY6T3JpZW50YXRpb249IjEiIHRpZmY6WFJlc29sdXRpb249IjMwMDAwMDAvMTAwMDAiIHRpZmY6WVJlc29sdXRpb249IjMwMDAwMDAvMTAwMDAiIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiIGV4aWY6Q29sb3JTcGFjZT0iMSIgZXhpZjpQaXhlbFhEaW1lbnNpb249IjMwMDAiIGV4aWY6UGl4ZWxZRGltZW5zaW9uPSIxMTE4Ij4gPHBob3Rvc2hvcDpUZXh0TGF5ZXJzPiA8cmRmOkJhZz4gPHJkZjpsaSBwaG90b3Nob3A6TGF5ZXJOYW1lPSJWTk1TIiBwaG90b3Nob3A6TGF5ZXJUZXh0PSJWTk1TIi8+IDxyZGY6bGkgcGhvdG9zaG9wOkxheWVyTmFtZT0iVk5NUyIgcGhvdG9zaG9wOkxheWVyVGV4dD0iVk5NUyIvPiA8L3JkZjpCYWc+IDwvcGhvdG9zaG9wOlRleHRMYXllcnM+IDxwaG90b3Nob3A6RG9jdW1lbnRBbmNlc3RvcnM+IDxyZGY6QmFnPiA8cmRmOmxpPkM5RkZBQjJFRkExRDcxRUFGQ0Q2MjhDMTEyOTcxMzAxPC9yZGY6bGk+IDwvcmRmOkJhZz4gPC9waG90b3Nob3A6RG9jdW1lbnRBbmNlc3RvcnM+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MzhkZmM1NjQtNjY5NS1hYjQ3LWJlMjctNGUyNmVjZmE1MDAxIiBzdEV2dDp3aGVuPSIyMDE5LTA0LTI1VDE3OjE3OjE5KzA1OjMwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmFhYTYzOGNlLWRmYTYtNjE0MC1hYjJkLTcwMjM1YTEzN2FlNiIgc3RFdnQ6d2hlbj0iMjAxOS0wNC0yNVQxODowNToyMSswNTozMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpiZTZmOGQyYS01YzRiLTk3NDktYjViMy02YjIwY2E5YzNhODkiIHN0RXZ0OndoZW49IjIwMTktMDYtMjdUMTc6MTk6MjMrMDU6MzAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY29udmVydGVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJmcm9tIGFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5waG90b3Nob3AgdG8gaW1hZ2UvcG5nIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJkZXJpdmVkIiBzdEV2dDpwYXJhbWV0ZXJzPSJjb252ZXJ0ZWQgZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NDk0ZDI4MzQtZTFiYy01YjRkLThlYzUtYzRmZTU0YzM0NmYxIiBzdEV2dDp3aGVuPSIyMDE5LTA2LTI3VDE3OjE5OjIzKzA1OjMwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOmJlNmY4ZDJhLTVjNGItOTc0OS1iNWIzLTZiMjBjYTljM2E4OSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDozOGRmYzU2NC02Njk1LWFiNDctYmUyNy00ZTI2ZWNmYTUwMDEiIHN0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDozOGRmYzU2NC02Njk1LWFiNDctYmUyNy00ZTI2ZWNmYTUwMDEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5zAFyiAADr1klEQVR4nOzdd7xldX3v//fMfIcOgiKiomLBgg1LbLFHthVL1KgoGkDMADNovEnuTfIz5RoTb9RIEZkBREIEUQwixqgL67VE49VoYokllsQSsQVFEWbB/P7Yx8hRyuyZc85n7b2fz8djP87Uc148gDVn9n6f71q1ZcuWAAAAAAAAAAAAAABAtdXVAQAAAAAAAAAAAAAAkBi4AwAAAAAAAAAAAAAwEAbuAAAAAAAAAAAAAAAMgoE7AAAAAAAAAAAAAACDYOAOAAAAAAAAAAAAAMAgGLgDAAAAAAAAAAAAADAIBu4AAAAAAAAAAAAAAAyCgTsAAAAAAAAAAAAAAINg4A4AAAAAAAAAAAAAwCAYuAMAAAAAAAAAAAAAMAgG7gAAAAAAAAAAAAAADIKBOwAAAAAAAAAAAAAAg2DgDgAAAAAAAAAAAADAIBi4AwAAAAAAAAAAAAAwCAbuAAAAAAAAAAAAAAAMgoE7AAAAAAAAAAAAAACDYOAOAAAAAAAAAAAAAMAgGLgDAAAAAAAAAAAAADAIBu4AAAAAAAAAAAAAAAxCqw4AZt/ah3bVCQAAAAAAAAAAAABMASe4AwAAAAAAAAAAAAAwCE5wBwCArXeTJEclWZfk5sUtAAAAAAAAAAAwC36c5Nwkm5J8zMAdAACu332TrE/y1CQ7FrcAAAAAAAAAAMAs+EySjUn+JsklP/tBA3cAALhmOyZ5esbD9nsXtwAAAAAAAAAAwCy4PMmbMh62f/CafoGBOwAALLZfkqOTHJXkxsUtAAAAAAAAAAAwC76Y5NQkZyb57nX9QgN3AAAYe0jGp7U/MT5PBgAAAAAAAACA7bU5yYUZn9b+7iRbtuY3Ge4AADDPdk3yrCTHJrlrcQsAAAAAAAAAAMyCryU5LckZSb416W82cAcAYB7dNskxSY5IsmdtCgAAAAAAAAAATL0rk7w9yaaFt1du6zsycAcAYF6sSjJKsiHJo5Osrs0BAAAAAAAAAICp962MT2o/LeOT27ebgTsAALPuBkmek+TYJLcvbgEAAAAAAAAAgGm3Jcm7k2xMcmGSzUv5zg3cAQCYVQcmWZ/ksCS7FbcAAAAAAAAAAMC0+26SM5OcmuSLy/VBDNwBAJgla5IckvGw/eFJVtXmAAAAAAAAAADA1Ptgkk1Jzkty+XJ/MAN3AABmwY2SHJnk6CT716YAAAAAAAAAAMDUuyTJ3yTZmOQzK/mBDdwBAJhm98z4tPanJ9m5uAUAAAAAAAAAAKbdxzI+rf3cJD+uCDBwBwBg2qxN8uQkG5I8oLgFAAAAAAAAAACm3aUZD9o3Jvl4cYuBOwAAU2PfJM9Lsi7JTYtbAAAAAAAAAABg2n06ySlJzk5ySXHLfzNwBwBg6B6Q5NgkT0myQ3ELAAAAAAAAAABMs58mOS/JpiQfKm65RgbuAAAM0U5JnpFkfZJ7FrcAAAAAAAAAAMC0+0KSU5OcmeR7tSnXzcAdAIAhuWWSo5M8N8nexS0AAAAAAAAAADDNNie5IMnGJO9NsqW0ZisZuAMAMAQPy/i09ickWVPcAgAAAAAAAAAA0+yrSU5LckaS/6xNmZyBOwAAVXZLcliSY5PcubgFAAAAAAAAAACm2ZVJ/j7JpiRvT3JVbc62M3AHAGClHZDkmCSHJ7lBcQsAAAAAAAAAAEyzbyZ5TcYntv9HccuSMHAHAGAlrE7yyCQbFt6urs0BAAAAAAAAAICptSXJRRmf1v7WJJtrc5aWgTsAAMtpzyS/mfGJ7QeUlgAAAAAAAAAAwHT7TpIzk5ya5Eu1KcvHwB0AgOVwlyTrkzwrya7FLQAAAAAAAAAAMM0+kOSUJOcnuby4ZdkZuAMAsFTWJHlCxsP2hxW3AAAAAAAAAADANPuvJGcl2ZTks7UpK8vAHQCA7bV3kucmOTrJLYtbAAAAAAAAAABgmv1jxqP2c5P8pLilhIE7AADb6t4Zn9b+tCQ7FbcAAAAAAAAAAMC0ujTJ65OckuSfilvKGbgDADCJHZI8JcmGJPcrbgEAAAAAAAAAgGn2qYxPaz87yQ+LWwbDwB0AgK1x0yTrkjwvyb7FLQAAAAAAAAAAMK0uS3JexsP2Dxe3DJKBOwAA1+WBSY5N8uQka4tbAAAAAAAAAABgWn0+yalJzkzy/dqUYTNwBwDgF+2c5NAk65McVJsCAAAAAAAAAABTa3OS8zM+rf19SbaU1kwJA3cAAH5m/yRHJzkyyY1qUwAAAAAAAAAAYGp9JclpSc5I8u3ilqlj4A4AMN9WJXl4xqe1H5JkTW0OAAAAAAAAAABMpSuTvC3JKUm6JFfV5kwvA3cAgPm0e5JnJzkmyYHFLQAAAAAAAAAAMK2+mfFp7acn+Xpxy0wwcAcAmC+3z/i09uck2aO4BQAAAAAAAAAAptFVSS5KsinJW5P0tTmzxcAdAGD2rU7y6CQbkoySrKrNAQAAAAAAAACAqXRxkjMzHrZ/uTZldhm4AwDMrr2SHJ7kmCS3LW4BAAAAAAAAAIBp9b6MR+1vTnJ5bcrsM3AHAJg9d0uyPskzk+xS3AIAAAAAAAAAANPoB0nOynjY/rnilrli4A4AMBtakidmPGx/SG0KAAAAAAAAAABMrY9mPGo/N8llxS1zycAdAGC63TjJUUmOTrJfcQsAAAAAAAAAAEyjS5O8LuNh+ydrUzBwBwCYTvfJ+LT230iyY3ELAAAAAAAAAABMo09mPGo/O8mPalP4GQN3AIDpsWOSpybZkPHAHQAAAAAAAAAAmMxlSd6YZGOSjxS3cA0M3AEAhu/mSdYlOSrJTYpbAAAAAAAAAABgGv1rxqP2s5L8oLiF62DgDgAwXA9OcmySJyVZW9wCAAAAAAAAAADT5vIkb06yKcn7k2ypzWFrGLgDAAzLLkmemWR9krsVtwAAAAAAAAAAwDT6cpLTkpyR5OLiFiZk4A4AMAy3TnJMkiOT7FXcAgAAAAAAAAAA0+bKJG9NsjHJRUmuqs1hWxm4AwDUWZXkERmf1v64JKtrcwAAAAAAAAAAYOp8PcnpC49vFLewBAzcAQBW3h5JnpPk2CR3KG4BAAAAAAAAAIBpc1WSLsmmjE9tv7I2h6Vk4A4AsHLumPFp7c9OsntxCwAAAAAAAAAATJuLk5yR5NQkXyluYZkYuAMALK/VSR6X8bD9EUlW1eYAAAAAAAAAAMBU2ZLkfRmf1v7mJFeU1rDsDNwBAJbHDZMckeSYJLcubgEAAAAAAAAAgGnz/SRnZTxs/9fiFlaQgTsAwNI6KOPT2g9NsnNtCgAAAAAAAAAATJ2PJDklyXlJLituoYCBOwDA9lub5EkZD9sfVNwCAAAAAAAAAADT5kdJXpfxae2fKm6hmIE7AMC2u0mSo5KsS3Lz4hYAAAAAAAAAAJg2/5TxqP3sJJcWtzAQBu4AAJO7X8antT8lyY7FLQAAAAAAAAAAME0uS3Juko1J/rG4hQEycAcA2Do7Jnl6xsP2exe3AAAAAAAAAADAtPlsxqe1n5Xkv2pTGDIDdwCA67ZfkqOTHJXkxsUtAAAAAAAAAAAwTS5Pcn7Gw/b3F7cwJQzcAQCu2UOTHJvkifE5EwAAAAAAAAAATOLfkpya5LVJvlPcwpQx1gIA+LldkzwryfokdyluAQAAAAAAAACAadInuTDj09rfleSq2hymlYE7AEBy2yTHJDkiyZ61KQAAAAAAAAAAMFX+I8npC49vFrcwAwzcAYB5tSrJKMmGJI9Osro2BwAAAAAAAAAApsZVSd6ZZGOStyW5sjaHWWLgDgDMmxskOTzJ0UluX9wCAAAAAAAAAADT5NtJXpPktCRfrU1hVhm4AwDz4sAk65MclmS34hYAAAAAAAAAAJgWW5K8N8mmJG9Osrk2h1ln4A4AzLI1SQ7JeNj+8CSranMAAAAAAAAAAGBqfD/JmRkP279Qm8I8MXAHAGbRjZIcmeToJPvXpgAAAAAAAAAAwFT5cJKNSc5L8tPiFuaQgTsAMEvumfFp7c9IslNxCwAAAAAAAAAATItLkpyd8Wnt/1zcwpwzcAcApt3aJE9OsiHJA4pbAAAAAAAAAABgmnwi49PaX5/k0uIWSGLgDgBMr32TPC/JuiQ3LW4BAAAAAAAAAIBp8ZMk52Y8bP9YcQv8EgN3AGDaPCDJ+oxPbd+huAUAAAAAAAAAAKbFZ5JsSnJWkkuKW+BaGbgDANNgpyTPyHjYfs/iFgAAAAAAAAAAmBaXJ/nbjE9r/0BxC2wVA3cAYMhumeToJM9NsndxCwAAAAAAAAAATIsvZXxa+5lJvlubApMxcAcAhmZVkodmfFr7E5KsKa0BAAAAAAAAAIDpsDnJhRkP29+VZEttDmwbA3cAYCh2S3JYxsP2A4tbAAAAAAAAAABgWvx7ktOSnJHkm8UtsN0M3AGAagckOSbJ4UluUNwCAAAAAAAAAADT4Kokb0+yceHtlbU5sHQM3AGACquTPDLJhoW3q2tzAAAAAAAAAABgKnwr45PaT0vyteIWWBYG7gDAStozyRFJ1mV8cjsAAAAAAAAAAHDdtiR5T8antb8lyebaHFheBu4AwEq4S5L1SZ6VZNfiFgAAAAAAAAAAmAbfS3Jmkk1JvlibAivHwB0AWC5rkjwh42H7w4pbAAAAAAAAAABgWnww41H7eUkuL26BFWfgDgAstb2TPDfJ0UluWdwCAAAAAAAAAADT4JIkr0uyMcmni1uglIE7ALBU7p3xae1PT7JjcQsAAAAAAAAAAEyD/5fxae2vT/Lj4hYYBAN3AGB77JDkKUk2JLlfcQsAAAAAAAAAAEyDH2c8aN+U8cAduBoDdwBgW9w0ybokz0uyb3ELAAAAAAAAAABMg08n2ZjkdUkuKW6BwTJwBwAm8aAkxyR5cpK1xS0AAAAAAAAAADB0lyc5L+Nh+4eKW2AqGLgDANdn5ySHJlmf5KDaFAAAAAAAAAAAmApfTLIpyZlJvlebAtPFwB0AuDb7Jzk6yZFJblSbAgAAAAAAAAAAg7c5yVsyPq39PUm21ObAdDJwBwCublWSh2d8WvshSdbU5gAAAAAAAAAAwOB9LclpSV6T5D+LW2DqGbgDAEmye5JnZzxsv2NxCwAAAAAAAAAADN2VSd6e8Wntb09yVW0OzA4DdwCYb7fPeNT+nCR7FLcAAAAAAAAAAMDQfTPJGRmf2P7vxS0wkwzcAWD+rE7y6CQbkoySrKrNAQAAAAAAAACAQduS5F1JNiW5MMnm2hyYbQbuADA/9kpyZJJ1SW5b3AIAAAAAAAAAAEP33SSvTXJqki8Vt8DcMHAHgNl3tyTrkzwzyS7FLQAAAAAAAAAAMHQfSLIxyd8muby4BeaOgTsAzKaW5IkZD9sfUpsCAAAAAAAAAACDd0mSs5JsSvKZ4haYawbuADBb9kny3CRHJ9mvuAUAAAAAAAAAAIbuYxmf1n5ukp8UtwAxcAeAWXGfJBuSPDXJjsUtAAAAAAAAAAAwZJcmeX3Gw/ZPFLcAv8DAHQCm144ZD9o3ZDxwBwAAAAAAAAAArt0/J9mU5HVJfljcAlwLA3cAmD43T7IuyVFJblLcAgAAAAAAAAAAQ/bTJOdlfFr7h4tbgK1g4A4A0+MhSY5J8qQka4tbAAAAAAAAAABgyD6f5NQkZyb5fm0KMAkDdwAYtl2SPDPJ+iR3K24BAAAAAAAAAIAh25zkzUk2JXlvki21OcC2MHAHgGG6dcantR+ZZK/iFgAAAAAAAAAAGLKvJjktyWuSfLs2BdheBu4AMByrkjwi49PaH5dkdW0OAAAAAAAAAAAM1pVJ3pZkY5J3JrmqNgdYKgbuAFBvjyTPyXjYfvviFgAAAAAAAAAAGLJvJjl94fEfxS3AMjBwB4A6d8x41P7sJLsXtwAAAAAAAAAAwFBdleRdGZ/W/tYkfW0OsJwM3AFgZa1O8riMh+2PSLKqNgcAAAAAAAAAAAbrO0lem+TUJP9W3AKsEAN3AFgZN0pyRJKjk9y6uAUAAAAAAAAAAIbs/Uk2JTk/yeXFLcAKM3AHgOV1UMantR+aZOfaFAAAAAAAAAAAGKz/SnJWko1JPlebAlQycAeApbc2yZMyHrY/qLgFAAAAAAAAAACG7B8zHrWfm+Sy4hZgAAzcAWDp3CTJUUnWJbl5cQsAAAAAAAAAAAzVpUnOTrIpyT8VtwADY+AOANvvfkk2JHlKkh2KWwAAAAAAAAAAYKg+lfGo/XVJflTcAgyUgTsAbJsdkzw9yfok9y5uAQAAAAAAAACAobosyRuTbEzykeIWYAoYuAPAZPZLcnSSo5LcuLgFAAAAAAAAAACG6l8zPq39rCTfL24BpoiBOwBsnYclOSbJE+PPTwAAAAAAAAAAuCZXJHlzxsP29yXZUloDTCUDPQC4drsmeVaS9UnuUtwCAAAAAAAAAABD9ZUkpyY5I8nFxS3AlDNwB4BfdtuMT2s/IsmetSkAAAAAAAAAADBIVyZ5a8antXdJrqrNAWaFgTsAjK1KMkqyIcmjk6yuzQEAAAAAAAAAgEH6RpLTFx5fL24BZpCBOwDz7gZJDs/4xPYDilsAAAAAAAAAAGCIrkpyUZKNGZ/afmVtDjDLDNwBmFcHJlmf5LAkuxW3AAAAAAAAAADAEF2c5IwkpyX5cnELMCcM3AGYJ2uSHJLxsP3hSVbV5gAAAAAAAAAAwOBsSfL+JJuSnJ/kitocYN4YuAMwD/ZOcmSSdUn2r00BAAAAAAAAAIBB+kGSs5JsTPKvxS3AHDNwB2CW3TPj09qfkWSn4hYAAAAAAAAAABiij2Q8an9jksuKWwAM3AGYOWuTPDnJhiQPKG4BAAAAAAAAAIAh+lGSs5NsSvLJ2hSAxQzcAZgV+yZ5XpJ1SW5a3AIAAAAAAAAAAEP0yYxPaz87yaW1KQDXzMAdgGn3gIxPa39yxqe3AwAAAAAAAAAAP3dZknMzPq39o8UtANfLwB2AabRTkmckWZ/knsUtAAAAAAAAAAAwRJ/LeNR+VpIfFLcAbDUDdwCmyS2THJ3kuUn2Lm4BAAAAAAAAAIChuTzJm5NsTPL+4haAbWLgDsDQrUry8CTHJHlCkjW1OQAAAAAAAAAAMDhfzvi09jOTXFybArB9DNwBGKrdkhyWZH2SA4tbAAAAAAAAAABgaPokb8142H5RkqtqcwCWhoE7AENzQMantR+e5AbFLQAAAAAAAAAAMDRfT3J6ktOSfLO4BWDJGbgDMASrkzwyyYaFt6trcwAAAAAAAAAAYFCuSvLOJBuTvC3JlbU5AMvHwB2ASnsmOSLJ0UluV5sCAAAAAAAAAACD8+0kZ2R8WvtXilsAVoSBOwAV7pJkfZJnJdm1uAUAAAAAAAAAAIZkS5L3JdmU5Pwkm0trAFaYgTsAK2VNkidkPGx/WHELAAAAAAAAAAAMzfeTnJnk1CSfr00BqGPgDsByu3GS5yZZl+SWxS0AAAAAAAAAADA0H874tPbzklxW3AJQzsAdgOVy74xPa396kh2LWwAAAAAAAAAAYEh+mOTsjIftnypuARgUA3cAltIOSZ6SZEOS+xW3AAAAAAAAAADA0PxTklOSvD7JpcUtAINk4A7AUrhpknVJnpdk3+IWAAAAAAAAAAAYkp8kOTfj09r/sbgFYPAM3AHYHg9Ksj7Jk5KsLW4BAAAAAAAAAIAh+WzGo/a/TnJJcQvA1DBwB2BSOyc5NONh+0G1KQAAAAAAAAAAMCiXJzk/ySlJPlDcAjCVDNwB2Fr7Jzk6yZFJblSbAgAAAAAAAAAAg/KlJKcmOTPJd2pTAKabgTsA12VVkkckOSbJIUnW1OYAAAAAAAAAAMBgbE7y1iSbklyUZEttDsBsMHAH4JrsnuTZSdYnuWNxCwAAAAAAAAAADMl/ZHxa+xlJvlncAjBzDNwBuLrbZzxqf06SPYpbAAAAAAAAAABgKK5K8vaMT2v/+yRX1uYAzC4DdwBWJ3l0kg1JRklW1eYAAAAAAAAAAMBg/GfGJ7WfluSrtSkA88HAHWB+7ZXkyCRHJ7lNcQsAAAAAAAAAAAzFliTvTXJKkrck2VybAzBfDNwB5s/dkqxP8swkuxS3AAAAAAAAAADAUHwvyZlJTk3yhdoUgPll4A4wH1qSJ2Y8bH9IbQoAAAAAAAAAAAzKh5JsSnJekp8WtwDMPQN3gNl2kyRHJjk6yX7FLQAAAAAAAAAAMBSXJDk7ySlJPl3cAsDVGLgDzKb7JNmQ5KlJdixuAQAAAAAAAACAofh/GZ/Wfm6SS4tbALgGBu4As2PHjAftGzIeuAMAAAAAAAAAAMmPMx60b0ryseIWAK6HgTvA9Lt5knVJjkpyk+IWAAAAAAAAAAAYis8k2Zjkb5JcUtwCwFYycAeYXg9Jsj7JE5KsLW4BAAAAAAAAAIAhuDzJeRmf1v7B4hYAtoGBO8B02SXJMzMett+tuAUAAAAAAAAAAIbii0lOTXJmku/WpgCwPQzcAabDrZMck+TIJHsVtwAAAAAAAAAAwBBsTnJhko1J3p1kS20OAEvBwB1guFYlGWU8bH9cktW1OQAAAAAAAAAAMAhfS3JakjOSfKu4BYAlZuAOMDx7JHlOkvVJbl/cAgAAAAAAAAAAQ3Blkrcn2bTw9sraHACWi4E7wHDcMeNR+7OT7F7cAgAAAAAAAAAAQ/CtjE9qPzXJvxe3ALACDNwBaq1O8riMh+2PSLKqNgcAAAAAAAAAAMptSfLuJBuTXJhkc20OACvJwB2gxo2SHJnk6CT716YAAAAAAAAAAMAgfDfJmRmf1v7F2hQAqhi4A6ysgzI+rf3QJDvXpgAAAAAAAAAAwCB8MOPT2t+U5PLiFgCKGbgDLL+1SZ6U8bD9QcUtAAAAAAAAAAAwBJckOSvJpiSfKW4BYEAM3AGWz75JnptkXZKbF7cAAAAAAAAAAMAQfCzjUfu5SX5c3ALAABm4Ayy9+yXZkOQpSXYobgEAAAAAAAAAgGqXZjxo35jk48UtAAycgTvA0tgxydOTrE9y7+IWAAAAAAAAAAAYgn/JeNR+dpJLilsAmBIG7gDbZ78kRyc5KsmNi1sAAAAAAAAAAKDaT5Ocl2RTkg8VtwAwhQzcAbbNwzI+rf3xcS0FAAAAAAAAAIAvJDk1yZlJvlebAsA0M8oE2Hq7JnlWxsP2uxS3AAAAAAAAAABAtc1JLkiyMcl7k2wprQFgJhi4A1y/2yY5JskRSfasTQEAAAAAAAAAgHJfTXJakjOS/GdtCgCzxsAd4JqtTjLK+LT2Ry98HwAAAAAAAAAA5tWVSf4+49Pa35HkqtocAGaVgTvAYjdIcnjGJ7YfUNwCAAAAAAAAAADVvpnkNRmf2P4fxS0AzAEDd4CxAzM+rf2wJLsVtwAAAAAAAAAAQKWrkrwryaYkb02yuTYHgHli4A7MszVJDsl42P7wJKtqcwAAAAAAAAAAoNR3kpyZ5NQkX6pNAWBeGbgD82jvJM9Nsi7JrYpbAAAAAAAAAACg2geSnJLk/CSXF7cAMOcM3IF5cs+MT2t/RpKdilsAAAAAAAAAAKDSfyU5K8mmJJ+tTQGAnzNwB2bd2iRPTrIhyQOKWwAAAAAAAAAAoNo/ZjxqPzfJT4pbAOCXGLgDs+qmSY5Ksm7h2wAAAAAAAAAAMK8uTXJOko1J/qm4BQCuk4E7MGsekPFp7U/O+PR2AAAAAAAAAACYV5/K+LT2s5P8sLgFALaKgTswC3ZK8owk65Pcs7gFAAAAAAAAAAAqXZbkvIyH7R8ubgGAiRm4A9PslkmOTvLcJHsXtwAAAAAAAAAAQKXPZzxq/+sk3y9uAYBtZuAOTJtVSR6e5Ngkj0+ypjYHAAAAAAAAAADKXJHkzRkP29+XZEtpDQAsAQN3YFrsluSwJOuTHFjcAgAAAAAAAAAAlb6S5LQkZyT5dnELACwpA3dg6A5IckySw5PcoLgFAAAAAAAAAACqXJnkbUlOSdIluao2BwCWh4E7MESrkzwq49PaH7nwfQAAAAAAAAAAmEffSHL6wuPrxS0AsOwM3IEh2TPJERmf2H7b2hQAAAAAAAAAAChzVZKLkmxK8tYkfW0OAKwcA3dgCO6S8Wntz0qya3ELAAAAAAAAAABUuTjJmRkP279cmwIANQzcgSprkjwh42H7w4pbAAAAAAAAAACg0vsyHrW/OcnltSkAUMvAHVhpN05yVJJ1SW5R3AIAAAAAAAAAAFV+kOSsjIftnytuAYDBMHAHVsq9Mz6t/elJdixuAQAAAAAAAACAKh9NsjHJG5JcVtwCAIOzasuWLdUNwIxb+9CuOgEAAAAAAAAAAACAKbC6OgAAAAAAAAAAAAAAABInuAMAAAAAAAAAAAAAMBBOcAcAAAAAAAAAAAAAYBAM3AEAAAAAAAAAAAAAGAQDdwAAAAAAAAAAAAAABsHAHQAAAAAAAAAAAACAQTBwBwAAAAAAAAAAAABgEAzcAQAAAAAAAAAAAAAYBAN3AAAAAAAAAAAAAAAGwcAdAAAAAAAAAAAAAIBBMHAHAAAAAAAAAAAAAGAQDNwBAAAAAAAAAAAAABgEA3cAAAAAAAAAAAAAAAbBwB0AAAAAAAAAAAAAgEEwcAcAAAAAAAAAAAAAYBAM3AEAAAAAAAAAAAAAGAQDdwAAAAAAAAAAAAAABsHAHQAAAAAAAAAAAACAQTBwBwAAAAAAAAAAAABgEAzcAQAAAAAAAAAAAAAYBAN3AAAAAAAAAAAAAAAGwcAdAAAAAAAAAAAAAIBBMHAHAAAAAAAAAAAAAGAQDNwBAAAAAAAAAAAAABgEA3cAAAAAAAAAAAAAAAbBwB0AAAAAAAAAAAAAgEEwcAcAAAAAAAAAAAAAYBAM3AEAAAAAAAAAAAAAGAQDdwAAAAAAAAAAAAAABsHAHQAAAAAAAAAAAACAQTBwBwAAAAAAAAAAAABgEAzcAQAAAAAAAAAAAAAYBAN3AAAAAAAAAAAAAAAGwcAdAAAAAAAAAAAAAIBBMHAHAAAAAAAAAAAAAGAQDNwBAAAAAAAAAAAAABgEA3cAAAAAAAAAAAAAAAbBwB0AAAAAAAAAAAAAgEEwcAcAAAAAAAAAAAAAYBAM3AEAAAAAAAAAAAAAGAQDdwAAAAAAAAAAAAAABsHAHQAAAAAAAAAAAACAQTBwBwAAAAAAAAAAAABgEAzcAQAAAAAAAAAAAAAYBAN3AAAAAAAAAAAAAAAGwcAdAAAAAAAAAAAAAIBBMHAHAAAAAAAAAAAAAGAQDNwBAAAAAAAAAAAAABgEA3cAAAAAAAAAAAAAAAbBwB0AAAAAAAAAAAAAgEEwcAcAAAAAAAAAAAAAYBAM3AEAAAAAAAAAAAAAGAQDdwAAAAAAAAAAAAAABsHAHQAAAAAAAAAAAACAQTBwBwAAAAAAAAAAAABgEAzcAQAAAAAAAAAAAAAYBAN3AAAAAAAAAAAAAAAGwcAdAAAAAAAAAAAAAIBBMHAHAAAAAAAAAAAAAGAQDNwBAAAAAAAAAAAAABgEA3cAAAAA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OwAAAAAAAAAAAAAAi2DgDgAAAAAAAAAAAADAIhi4AwAAAAAAAAAAAACwCAbuAAAAAAAAAAAAAAAsgoE7AAAAAAAAAAAAAACLYOAOAAAAAAAAAAAAAMAiGLgDAAAAAAAAAAAAALAIBu4AAAAAAAAAAAAAACyCgTsAAAAAAAAAAAAAAItg4A4AAAAAAAAAAAAAwCIYuAMAAAAAAAAAAAAAsAgG7gAAAAAAAAAAAAAALIKBOwAAAAAAAAAAAAAAi2DgDgAAAAAAAAAAAADAIhi4AwAAAAAAAAAAAACwCAbuAAAAAAAAAAAAAAAsgoE7AAAAAAAAAAAAAACLYOAOAAAAAAAAAAAAAMAiGLgDAAAAAAAAAAAAALAIBu4AAAAAAAAAAAAAACyCgTsAAAAAAAAAAAAAAItg4A4AAAAAAAAAAAAAwCIYuAMAAAAAAAAAAAAAsAgG7gAAAAAAAAAAAAAALIKBOwAAAAAAAAAAAAAAi2DgDgAAAAAAAAAAAADAIhi4AwAAAAAAAAAAAACwCAbuAAAAAAAAAAAAAAAsgoE7AAAAAAAAAAAAAACLYOAOAAAAAAAAAAAAAMAiGLgDAAAAAAAAAAAAALAIBu4AAAAAAAAAAAAAACyCgTsAAAAAAAAAAAAAAItg4A4AAAAAAAAAAAAAwCIYuAMAAAAAAAAAAAAAsAgG7gAAAAAAAAAAAAAALIKBOwAAAAAAAAAAAAAAi2DgDgAAAAAAAAAAAADAIhi4AwAAAAAAAAAAAACwCAbuAAAAAAAAAAAAAAAsgoE7AAAAAAAAAAAAAACLYOAOAAAAAAAAAAAAAMAiGLgDAAAAAAAAAAAAALAIBu4AAAAAAAAAAAAAACyCgTsAAAAAAAAAAAAAAItg4A4AAAAAAAAAAAAAwCIYuAMAAAAAAAAAAAAAsAgG7gAAAAAAAAAAAAAALIKBOwAAAAAAAAAAAAAAi2DgDgAAAAAAAAAAAADAIhi4AwAAAAAAAAAAAACwCAbuAAAAAAAAAAAAAAAsgoE7AAAAAAAAAAAAAACLYOAOAAAAAAAAAAAAAMAiGLgDAAAAAAAAAAAAALAIBu4AAAAAAAAAAAAAACyCgTsAAAAAAAAAAAAAAItg4A4AAAAAAAAAAAAAwCIYuAMAAAAAAAAAAAAAsAgG7gAAAAAAAAAAAAAALIKBOwAAAAAAAAAAAAAAi2Dg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' // Path to your logo image constructor(private dialogService: NbDialogService,private domSanitizer: DomSanitizer, private router:Router,private toastrService: NbToastrService,private service: SmartTableData,public _api:PageapiService,private windowService: NbWindowService) { const data = this.service.getData(); - + this.defaultStartDate = new Date(); // Set your desired default start date + this.defaultEndDate = new Date(); this.settings = { selectMode: 'multi', @@ -275,7 +298,7 @@ export class OrderComponent { this._api.getOrders(param).subscribe(res => { console.log(res) if(res.status == 200){ - + this.orders =[]; let passData = res.data passData.sort((a: any, b: any) => { return b.id - a.id; @@ -435,7 +458,7 @@ onSubmit(){ console.log( this.selectedRows , this.driverForm.value) let tmp=[]; this.selectedRows.forEach(element => { - tmp.push({id:element.id ,driverId: this.driverForm.value.driver , status:'Out For Delivery' }) + tmp.push({orderId:element.orderId ,driverId: this.driverForm.value.driver , status:'Out For Delivery' }) }); @@ -466,10 +489,19 @@ onSubmit2(){ if(this.selectedRows.length>0){ - console.log( this.selectedRows , this.driverForm.value) + console.log( this.selectedRows , this.selectDriver,this.selectStatus) let tmp=[]; this.selectedRows.forEach(element => { - tmp.push({id:element.id , status:'In Progress' }) + + + if(this.selectStatus == "Out For Delivery"){ + tmp.push({orderId:element.orderId , driverId:this.selectDriver, status:this.selectStatus }) + }else if(this.selectStatus == "Cancelled"){ + tmp.push({orderId:element.orderId , reason:this.CancelReason, status:this.selectStatus }) + }else{ + tmp.push({orderId:element.orderId , status:this.selectStatus }) + } + }); @@ -484,10 +516,11 @@ onSubmit2(){ this._api.CreateOrder (param).subscribe(res => { if (res.status == 200) { console.log(res) - this.showToast('success', 'Data Changed Successfully', 'Orders Inprogress Completed..!'); + this.showToast('success', 'Updated Successfully', ''); this.getorderlistApi(); + this.selectStatus =[]; }else{ - this.showToast('warning', 'Somthing is Wrong...!', 'Orders Inprogress Failed..!'); + this.showToast('warning', 'Somthing is Wrong...!', ''); } }) }else{ @@ -500,7 +533,8 @@ updateAllComplete(pa,s,d){ } selectall(){ - if(this.isChecked == false){ + console.log(this.isChecked) + if(this.isChecked == true){ this.isChecked = true }else{ this.isChecked = false @@ -518,6 +552,30 @@ selectall(){ } +} + +onCheckboxChange(data){ + console.log(data.target.checked) + this.isChecked = data.target.checked + console.log(this.isChecked) + // if(this.isChecked == false){ + // this.isChecked = true + // }else{ + // this.isChecked = false + // } + console.log(this.isChecked) + + this.orders.forEach((element:any, index) => { + + element. selected = this.isChecked + + }) + + if(this.isChecked == true){ + this.selectedRows = this.orders + } + + } selectSingleRow(data){ console.log(data) @@ -596,4 +654,290 @@ filterItems() { console.log( this.filteredItems) } + +refresh(){ + this.getorderlistApi() +} + +manipulateDate(data){ + console.log(data) + + let start = data.start + let end = data.end + + + + + + let param = {fromDate:start + ,toDate: end} + console.log(param) + this._api.getOrders(param).subscribe(res => { + console.log(res) + if(res.status == 200){ + this.orders =[]; + let passData = res.data + passData.sort((a: any, b: any) => { + return b.id - a.id; + }); + passData.forEach((element:any, index) => { + element.index = index +1 + element. selected =false + element. selectedval =0 + element.customer = element['OrderDetails.CusDetails.cusName'] + + element.address = element['OrderDetails.CusDetails.address_1']+","+element['OrderDetails.CusDetails.city']+","+element['OrderDetails.CusDetails.pincode'] + element.productName = element['ProductDetails.productName'] + + }); + this.orders = passData + // console.log(data) + this.source.load(passData); + }else{ + this.orders =[]; + } + }) +} + +selectOnRowClick(e){ + console.log(e) +} + +download(){ + console.log("download") + console.log(this.selectedRows) + + this.selectedRows.forEach(element => { + + this.ordersArray.push(element.orderId) + + }); + +this.getAnswerProduct() + + + + +} +getAnswerProduct(){ + + console.log() + + + + let param={orderId:this.ordersArray} + this._api.getProductList(param).subscribe(res => { + console.log(res) + + if(res.status == 200){ + + let fullData = res.data + + fullData.forEach(element => { + element.name = element.ProductDetails[0].productName+"-("+element.ProductDetails[0].skuId+")" + element.qty = parseInt(element.qty) + element.price = element.ProductDetails[0].productCategory + // this.invoice.additionalDetails = 'https://vnms.in/services/' + }); + + + + this.selectedRows.forEach(element => { + + + + let result = fullData.filter(arr=>{return arr.orderId == element.orderId}) + + element.fullData = result + + }); + console.log( this.selectedRows) + + this.generatePDF() + } + }) + +} + + +generatePDF(action = 'download') { + + let displayContent=[]; + + this.selectedRows.forEach(element => { + + let fullData = element.fullData + displayContent.push( { + image: this.logo, + width: 100, + alignment: 'center', + margin: [0, 10] // Adjust the margins as needed + }, + // { + // text: 'VNMS', + // fontSize: 16, + // alignment: 'center', + // color: '#047886' + // }, + // { + // text: 'INVOICE', + // fontSize: 20, + // bold: true, + // alignment: 'center', + // decoration: 'underline', + // color: 'skyblue' + // }, + { + text: 'Customer Details', + style: 'sectionHeader' + }, + { + columns: [ + [ + { + text: element['OrderDetails.CusDetails.cusName'], + + bold:true + }, + { text:element['OrderDetails.CusDetails.address_1'] }, + { text:element['OrderDetails.CusDetails.email'] }, + { text:element['OrderDetails.CusDetails.phoneNo'] } + ], + [ + { + text: `SALES ORDER`, + alignment: 'right' + }, + { + text: `Date: ${new Date(element.createdAt).toLocaleString()}`, + alignment: 'right' + }, + { + text: `ORDER ID :${ element.orderId }`, + alignment: 'right' + } + ] + ] + }, + { + text: 'Order Details', + style: 'sectionHeader' + }, + { + table: { + headerRows: 1, + widths: ['*', 'auto', 'auto'], + body: [ + [ + { text: 'Product', color: 'white', fillColor: 'black' }, + { text: 'Type', color: 'white', fillColor: 'black' }, + { text: 'Quantity', color: 'white', fillColor: 'black' } + ], + ...fullData.map((p) => [ + p.name, + p.price, + + ( p.qty) , + ]), + [{text: 'Total Qty', colSpan: 2}, {}, fullData .reduce((sum, p) => sum + p.qty, 0)] + + ] + } + }, + // { + // text: 'Additional Details', + // style: 'sectionHeader' + // }, + { + text: '', + margin: [0, 0 ,0, 15] + }, + { + columns: [ + // [{ qr: `${this.invoice.customerName}`, fit: '50' }], + // [{ text: 'Signature', alignment: 'right', italics: true}], + ] + }, + { + text: 'Terms and Conditions', + style: 'sectionHeader' + }, + { + ul: [ + 'Order once placed cannot be changed . Please contact VNMS for any queries.', + 'Delivery of the product will be subject to the manufacturer terms and conditions.', + 'This is a system generated sales order.', + ], + }, + { text: '', pageBreak: 'after' }, + ) + + + + + }); + displayContent.pop(); + console.log(displayContent) + + +// this.inputFieldGroups.forEach((element:any) => { + + +// this.productfull.forEach(e => { + + +// if(e.id === element.id){ +// element.name = e.productName +"-("+e.skuId+")" + + +// } +// }); + +// }); +// console.log( this.inputFieldGroups ) +// this.invoice.products =[]; +// this.inputFieldGroups.forEach((res:any) => { + + +// res.name = res.name +// res.qty = parseInt(res.qty) +// res.price = this.setData['OrderDetails.CusDetails.cusType'] +// this.invoice.additionalDetails = 'https://vnms.in/services/' + +// this.invoice.products.push(res) + + + + +// }) +// this.invoice.products = this.invoice.products.filter(arr=>{return arr.qty != 0}) + let docDefinition = { + content: displayContent, + styles: { + sectionHeader: { + bold: true, + decoration: 'underline', + fontSize: 14, + margin: [0, 15,0, 15] + } + } + }; + + if(action==='download'){ + + let name= "VNMS-Report" + pdfMake.createPdf(docDefinition).download(name); + + }else if(action === 'print'){ + pdfMake.createPdf(docDefinition).print(); + }else{ + pdfMake.createPdf(docDefinition).open(); + } + //this.orders.filter((arr:any)=>{return arr.selectedval + + this.orders.forEach((element:any) => { + element.selected = false + }); +} + } diff --git a/src/app/pages/pageapi.service.ts b/src/app/pages/pageapi.service.ts index 5fa3162..a2d8e0c 100644 --- a/src/app/pages/pageapi.service.ts +++ b/src/app/pages/pageapi.service.ts @@ -40,7 +40,7 @@ public mixDetails_observable$ = this.mixDetails.asObservable(); } getDriverSheet(param): Observable { //console.log(params.email) - return this._http.post(this.apiUrl + "getDriverSheet",param) + return this._http.post(this.apiUrl + "getDriverSheetAdmin",param) } @@ -57,7 +57,11 @@ public mixDetails_observable$ = this.mixDetails.asObservable(); return this._http.post(this.apiUrl + "getProductDeliverysheet",param) } - + getProductReturnsheet(param): Observable { + //console.log(params.email) + return this._http.post(this.apiUrl + "getProductReturnsheet",param) + + } getProductListSummary(param): Observable { @@ -112,7 +116,10 @@ public mixDetails_observable$ = this.mixDetails.asObservable(); return this._http.post(this.apiUrl + 'getProductList', addParams) } - - + + CreateReturn(addParams:any): Observable { + return this._http.post(this.apiUrl + 'CreateReturn', addParams) + + } } diff --git a/src/app/pages/pages-menu.ts b/src/app/pages/pages-menu.ts index 199120b..ba53fed 100644 --- a/src/app/pages/pages-menu.ts +++ b/src/app/pages/pages-menu.ts @@ -23,6 +23,10 @@ export const MENU_ITEMS: NbMenuItem[] = [ title: 'Delivery Sheet', link: '/pages/delivery-sheet', }, + { + title: 'Return Sheet', + link: '/pages/return-sheet', + }, ], // link: '/pages/order', @@ -69,22 +73,22 @@ export const MENU_ITEMS: NbMenuItem[] = [ home: true, }, - { - title: 'FEATURES', - group: true, - }, - { - title: 'Email', - icon: 'email-outline', - link: '/pages/email', - home: true, - }, - { - title: 'Settings', - icon: 'settings-2-outline', - link: '/pages/profile', - home: true, - }, + // { + // title: 'FEATURES', + // group: true, + // }, + // { + // title: 'Email', + // icon: 'email-outline', + // link: '/pages/email', + // home: true, + // }, + // { + // title: 'Settings', + // icon: 'settings-2-outline', + // link: '/pages/profile', + // home: true, + // }, // { // title: 'Auth', // icon: 'lock-outline', diff --git a/src/app/pages/pages-routing.module.ts b/src/app/pages/pages-routing.module.ts index 520eea8..0071b82 100644 --- a/src/app/pages/pages-routing.module.ts +++ b/src/app/pages/pages-routing.module.ts @@ -15,6 +15,7 @@ import { SummaryListComponent } from './summary-list/summary-list.component'; import { SummaryDetailsComponent } from './summary-list/summary-details/summary-details.component'; import { EmailComponent } from './email/email.component'; import { DriverySheetComponent } from './drivery-sheet/drivery-sheet.component'; +import { ReturnSheetComponent } from './return-sheet/return-sheet.component'; const routes: Routes = [{ path: '', @@ -70,6 +71,11 @@ const routes: Routes = [{ path: 'delivery-sheet', component:DriverySheetComponent + },{ + + path: 'return-sheet', + component:ReturnSheetComponent + } diff --git a/src/app/pages/pages.module.ts b/src/app/pages/pages.module.ts index 084c1a2..1695105 100644 --- a/src/app/pages/pages.module.ts +++ b/src/app/pages/pages.module.ts @@ -1,5 +1,5 @@ import { NgModule,NO_ERRORS_SCHEMA ,CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; -import { NbDialogModule, NbListModule, NbMenuModule, NbToggleModule } from '@nebular/theme'; +import { NbDialogModule, NbListModule, NbMenuModule, NbToggleModule, NbTooltipModule } from '@nebular/theme'; import { ThemeModule } from '../@theme/theme.module'; import { PagesComponent } from './pages.component'; @@ -48,6 +48,8 @@ import { SummaryListComponent } from './summary-list/summary-list.component'; import { SummaryDetailsComponent } from './summary-list/summary-details/summary-details.component'; import { EmailComponent } from './email/email.component'; import { DriverySheetComponent } from './drivery-sheet/drivery-sheet.component'; +import { AddOrderComponent } from './order/add-order/add-order.component'; +import { ReturnSheetComponent } from './return-sheet/return-sheet.component'; @NgModule({ imports: [ PagesRoutingModule, @@ -62,7 +64,7 @@ import { DriverySheetComponent } from './drivery-sheet/drivery-sheet.component'; NbUserModule, NbCheckboxModule, NbRadioModule, - NbDatepickerModule, + NbTooltipModule, FormsModule, ReactiveFormsModule, NbSelectModule, NbIconModule, @@ -71,7 +73,7 @@ import { DriverySheetComponent } from './drivery-sheet/drivery-sheet.component'; NbTreeGridModule, NbIconModule, NbInputModule, - ThemeModule, + ThemeModule, NbDatepickerModule.forRoot(), NbListModule,NbToggleModule, NbDialogModule.forChild(), DataTableModule.forRoot(), NgxDaterangepickerMd.forRoot(), Ng2SmartTableModule, @@ -94,7 +96,7 @@ import { DriverySheetComponent } from './drivery-sheet/drivery-sheet.component'; AssignFormComponent, ProfileComponent, MixedFormComponent, - AuthComponent,ForgotPasswordComponent, OtpComponent,ResetPasswordComponent, ViewDetailsComponent, SummaryListComponent, SummaryDetailsComponent, EmailComponent, DriverySheetComponent, + AuthComponent,ForgotPasswordComponent, OtpComponent,ResetPasswordComponent, ViewDetailsComponent, SummaryListComponent, SummaryDetailsComponent, EmailComponent, DriverySheetComponent, AddOrderComponent, ReturnSheetComponent, ], schemas: [CUSTOM_ELEMENTS_SCHEMA,NO_ERRORS_SCHEMA], }) diff --git a/src/app/pages/return-sheet/return-sheet.component.html b/src/app/pages/return-sheet/return-sheet.component.html new file mode 100644 index 0000000..5fde03c --- /dev/null +++ b/src/app/pages/return-sheet/return-sheet.component.html @@ -0,0 +1,319 @@ + + + + +
+
+
Return Sheet
+
+
+
+ + + +
+
+
+
+ + + + + + +
+
+
+ + + + + + Select Drivers + + {{user.userName }} + + + + + + +
+
+
+
+ + +
+
+ +
+
+ +
+
+
+
+ + + +
No Data Found For Selected Driver
+
+ vnms + + + +
+
+
Driver Name: {{driverName}}
+
+
+
Return Sheet
+
+
+
+ Date :{{DateDisplay | date :'dd/MM/yy'}} +
+
+
+ +
+ + + + + + + + + + + +
+ + + + + + + + + + + + + +
{{customer(row.item.orderId) }}
+ + +
+ + +
+ +
+ + + + + +
+ + + + + + + + + + + + + +
{{ product }}
+ + +
+ + +
+ +
+ + + +
+ + + + + + + + + + + + + +
{{ product }}
+ + +
+ + +
+ +
+ + + + + +
+ + + + + + + + + + + + + +
{{ product }}
+ + +
+ + +
+ +
+ + + +
+
+ + + +
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+ + +
+
+
diff --git a/src/app/pages/return-sheet/return-sheet.component.scss b/src/app/pages/return-sheet/return-sheet.component.scss new file mode 100644 index 0000000..ac99c0f --- /dev/null +++ b/src/app/pages/return-sheet/return-sheet.component.scss @@ -0,0 +1,176 @@ + + td ,input[type="checkbox"] { + font-size: 1px !important; + } + + .highlight-cell { + background-color: yellow; + /* Add any other styling properties as desired */ + } + + ::ng-deep .ng2-smart-action-multiple-select{ + text-align: center; + } + + ::ng-deep .ng2-smart-action-multiple-select > input{ + width:15px; + height:15px; + display: unset; + } + + ::ng-deep .desired-value-row{ +color: red !important; + } + + .align-left{ + text-align: left !important; + } + .align-center{ + text-align: center !important; + } + .align-right{ + text-align: right !important; + } + ::ng-deep :not(.dark-theme) .ng-data-table-container .ng-data-table tbody > tr.row-even td { + background: white; + //padding: 10px; + font-family: var(--smart-table-font-family); + font-size: var(--smart-table-font-size); + font-weight: var(--smart-table-font-weight); + line-height: var(--smart-table-line-height); + color: var(--smart-table-fg); + } + ::ng-deep :not(.dark-theme) .ng-data-table-container .ng-data-table thead > tr .ng-data-table-column-header .ng-data-table-column-header-label:first-child { + font-size: 18px; + padding: 10px; + color: #1e6bb8; + text-decoration: none; + font-family: var(--smart-table-header-font-family); + font-size: var(--smart-table-header-font-size); + font-weight: var(--smart-table-header-font-weight); + line-height: var(--smart-table-header-line-height); + } + ::ng-deep :not(.dark-theme) .ng-data-table-container .ng-data-table tbody > tr.row-odd td { + // padding: 10px; + font-family: var(--smart-table-font-family); + font-size: var(--smart-table-font-size); + font-weight: var(--smart-table-font-weight); + line-height: var(--smart-table-line-height); + color: var(--smart-table-fg); + } + ::ng-deep :not(.dark-theme) .ng-data-table-container .ng-data-table-content-container .ng-data-table-content { + min-height: 100px !important; + font-size: 18px; + } + ::ng-deep :not(.dark-theme) .ng-data-table-container .ng-data-table thead > tr:last-child th { + + background-color:#fff; font-family: var(--smart-table-font-family); + font-size: var(--smart-table-font-size); + font-weight: var(--smart-table-font-weight); + line-height: var(--smart-table-line-height); + color: var(--smart-table-fg); + + } + tr{ + color: white; + background-color:#fff; + } + th{ + color: white; + background-color:#fff; + } + + * { + box-sizing: border-box; + } + .row { + display: flex; + background-color:#fff; + } + + /* Create two equal columns that sits next to each other */ + .column { + flex: 50%; + // padding: 10px; + // height: 300px; /* Should be removed. Only for demonstration */ + } + ::ng-deep .mat-select-value{ + color: white!important; } + .column1 { + width: 210px; + text-align: center; + text-overflow: ellipsis; + padding: 30px; + //height: 300px; /* Should be removed. Only for demonstration */ + } + + + .add { + display: flex; + align-items: center; + justify-content: center; + font-size: 1.75rem !important; + padding: var(--smart-table-filter-padding); + border-color: var(--smart-table-add-button-border-color); + background-color: var(--smart-table-add-button-background-color); + color: var(--smart-table-add-button-text-color); + border-radius: 0.375rem; + + font-family: var(--smart-table-header-font-family); + font-size: var(--smart-table-header-font-size); + font-weight: var(--smart-table-header-font-weight); + line-height: var(--smart-table-header-line-height); + } + span{ + + color: #000; + } + + span:hover{ + + color: #1e6bb8; + } + a[disabled="disabled"] { + pointer-events: none; + } + .check{ + display: flex; align-items: center; text-decoration: none; + height: 100%; width: 100%; font-size: 2rem!important; + } + + .checkTxt{ + //background: white; + // padding: 10px; + font-family: var(--smart-table-font-family); + font-size: var(--smart-table-font-size); + font-weight: var(--smart-table-font-weight); + line-height: var(--smart-table-line-height); + color: var(--smart-table-fg); + text-transform: capitalize; + } + + + ::ng-deep .md-drppicker .btn, .md-drppicker .btn:focus, .md-drppicker .btn:hover { + background-color: #4caf50 !important; + margin-left: 10px !important; + } + + ::ng-deep .md-drppicker .btn.btn-default{ + color: #000 !important; + background-color: #dcdcdc !important; + } + + ::ng-deep .md-drppicker td.active{ + background-color: #1f7f6f !important; + } + ::ng-deep .md-drppicker .ranges ul li button.active { + background-color: #1f7f6f !important; + } + ::ng-deep .md-drppicker.double { + width: 640px !important; + } + + h5{ + text-align: center; + } + \ No newline at end of file diff --git a/src/app/pages/return-sheet/return-sheet.component.spec.ts b/src/app/pages/return-sheet/return-sheet.component.spec.ts new file mode 100644 index 0000000..b6931ec --- /dev/null +++ b/src/app/pages/return-sheet/return-sheet.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ReturnSheetComponent } from './return-sheet.component'; + +describe('ReturnSheetComponent', () => { + let component: ReturnSheetComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ ReturnSheetComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(ReturnSheetComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/return-sheet/return-sheet.component.ts b/src/app/pages/return-sheet/return-sheet.component.ts new file mode 100644 index 0000000..7190821 --- /dev/null +++ b/src/app/pages/return-sheet/return-sheet.component.ts @@ -0,0 +1,396 @@ +import { Component, OnInit } from '@angular/core'; + +import * as html2pdf from 'html2pdf.js' +import * as moment from 'moment'; +import { PageapiService } from '../pageapi.service'; +import { Router } from '@angular/router'; +@Component({ + selector: 'ngx-return-sheet', + templateUrl: './return-sheet.component.html', + styleUrls: ['./return-sheet.component.scss'] +}) +export class ReturnSheetComponent implements OnInit { + + ranges: any = { + 'Today': [moment(), moment()], + // 'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')], + // 'Last 7 Days': [moment().subtract(6, 'days'), moment()], + // 'Last 30 Days': [moment().subtract(29, 'days'), moment()], + // 'This Month': [moment().startOf('month'), moment().endOf('month')], + // 'Last Month': [ + // moment().subtract(1, 'month').startOf('month'), + // moment().subtract(1, 'month').endOf('month') + // ] + + };productDeatils:any =[]; DateDisplay:any =[];driverName:any =[]; selectDate:any =[]; driverId:any =[]; + selectedDateRange:any =[];drivers:any =[];summaryaData:any=[];driverval:any=[];returnSummary:any =[]; + constructor(public _api:PageapiService, private router:Router) { } + + ngOnInit(): void { + // this.selectedDateRange =[]; + // console.log(moment()['_d']) + this.getDriverlistApi() + this.DateDisplay = moment()['_d'] + + + } + + + back(){ + + } + save(){ + + } + + generatePDF(data){ + + + } + dateWiseFilter(){ + console.log(this.selectedDateRange,this.driverval) + if(this.selectedDateRange.length!=0){ + + + + } + //this.getDriverSummaryAdminList(result) + + } + + mergeOrders(orderItems: any[]) { + this.summaryaData = orderItems.reduce((acc, curr) => { + const existingOrder = acc.find((order) => order.orderId === curr.orderId); + if (existingOrder) { + existingOrder.total_qty += curr.total_qty; + } else { + acc.push(curr); + } + return acc; + }, []); + } + getDriverlistApi(){ + // console.log(this.selectedDateRange) + let param ={} + this._api.getusers(param).subscribe(res => { + console.log(res) + if(res.status == 200){ + + let passData = res.data + let driver = passData.filter(arr=>{return arr.role == 'DRIVER'}) + driver.sort((a: any, b: any) => { + return b.id - a.id; + }); + driver.forEach((element:any, index) => { + element.index = index +1 + + }); + + + + this.drivers = driver + // console.log(data) + + } + }) + } + + + getDriverSummaryAdminList(date){ + let param ={date:new Date(date)} + this._api.getDriverSummaryAdminList(param).subscribe(res => { + console.log(res) + if(res.status == 200){ + + console.log(res.data) + + } + }) + } + + val(data){ + console.log(data) + this.driverName = data.userName + + let result; + // if(this.selectedDateRange.length != 0){ + // result= this.selectedDateRange.endDate['$d'] + // }else{ + + result = this.selectDate + // } + this.DateDisplay = result + this.driverId = data.id + console.log(result) + // let param ={date:new Date(result),id:data.id} + // this._api.getDriverSheet(param).subscribe(res => { + // console.log(res) + // if(res.status == 200){ + + // console.log(res.data) + + // this.summaryaData = res.data + // this.summaryaData.forEach(element => { + // element.name = element['UserDetails.userName'] + + // }); + + // this.mergeOrders( this.summaryaData) + + // }else{ + // this.summaryaData =[]; + // } + // }) + + // this._api.getReturnDriverSummaryListadmin(param).subscribe(res => { + // console.log(res) + // if(res.status == 200){ + + // console.log(res.data) + + // this.returnSummary = res.data + + + + // // this.mergeOrders( this.summaryaData) + + // } + // }) + + // this._api.getProductDeliverysheet(param).subscribe(res => { + // console.log(res) + // if(res.status == 200){ + + // console.log(res.data) + + // this.productDeatils = res.data + + + + // // this.mergeOrders( this.summaryaData) + + // } + // }) + + + + + } + + + returnCount(data){ + let result = this.returnSummary.filter(arr=>{return arr.orderId == data}) +console.log(result) + if(result.length>0){ + + return result[0].total_amount + }else{ + return '-' + } + + } + + view(data){ + this.router.navigate(['/pages/summary/'+data]) + } + + + filterData(param){ + + let tmp=[]; + let order = this.productDeatils.filter(arr=>{return arr.orderId == param}) +if(order.length>0){ + + //console.log(param) + + + order.forEach(element => { + + if(element.ProductDetails.length>0){ + + tmp.push(element.ProductDetails[0].productName) + } + + + + }); + //console.log(tmp) + return tmp +}else{ + return tmp +} + + + } + + + customer(param){ + + let tmp=[]; + let order = this.productDeatils.filter(arr=>{return arr.orderId == param}) +if(order.length>0){ + + //console.log(param) + + + order.forEach(element => { + + if(element.CusDetails.length>0){ + + tmp.push(element.CusDetails[0].cusName) + } + + + + }); + //console.log(tmp) + return tmp[0] +}else{ + return tmp +} + + + } + + filterDataqty(param){ + + let tmp=[]; + let order = this.productDeatils.filter(arr=>{return arr.orderId == param}) +if(order.length>0){ + + console.log(param) + + + order.forEach(element => { + + if(element.ProductDetails.length>0){ + + tmp.push(element.qty) + } + + + + }); + //console.log(tmp) + return tmp +}else{ + return tmp +} + + + } + + filterDataNo(param){ + + let tmp=[]; + let order = this.productDeatils.filter(arr=>{return arr.orderId == param}) +if(order.length>0){ + + console.log(param) + + + order.forEach(element => { + + if(element.ProductDetails.length>0){ + + tmp.push(element.cylinderNo) + } + + + + }); + //console.log(tmp) + return tmp +}else{ + return tmp +} + + + } + download(){ + var element = document.getElementById('table'); +var opt = { + margin: 1, + filename: 'sheet.pdf', + image: { type: 'jpg', quality: 0.98 }, + html2canvas: { scale: 2 }, + jsPDF: { unit: 'in', format: 'letter', orientation: 'portrait' } +}; + +// New Promise-based usage: +html2pdf().from(element).set(opt).save(); + } + + generate(){ + + console.log(this.selectDate) + const utcDate = new Date(this.selectDate[0]); + + // Add one day to the UTC date + utcDate.setDate(utcDate.getDate() + 1); + + // Convert the updated date to a UTC string + const updatedUtcDate = utcDate.toISOString(); + console.log(updatedUtcDate) + + let param ={date: updatedUtcDate,id:this.driverId} + this._api.getDriverSheet(param).subscribe(res => { + console.log(res) + if(res.status == 200){ + + console.log(res.data) + + this.summaryaData = res.data + this.summaryaData.forEach(element => { + element.name = element['UserDetails.userName'] + + }); + + this.mergeOrders( this.summaryaData) + + }else{ + this.summaryaData =[]; + } + }) + + this._api.getReturnDriverSummaryListadmin(param).subscribe(res => { + console.log(res) + if(res.status == 200){ + + console.log(res.data) + + this.returnSummary = res.data + + + + // this.mergeOrders( this.summaryaData) + + } + }) + + this._api.getProductReturnsheet(param).subscribe(res => { + console.log(res) + if(res.status == 200){ + + console.log(res.data) + + this.productDeatils = res.data + + + + // this.mergeOrders( this.summaryaData) + + } + }) + + } + onStartDateChanged(data){ + this.DateDisplay = data + this.selectDate =[]; + this.selectDate.push(data) + //this.selectDate = data + console.log(data) + + + } +} diff --git a/src/app/pages/summary-list/summary-details/summary-details.component.html b/src/app/pages/summary-list/summary-details/summary-details.component.html index d889724..9cae11a 100644 --- a/src/app/pages/summary-list/summary-details/summary-details.component.html +++ b/src/app/pages/summary-list/summary-details/summary-details.component.html @@ -29,7 +29,8 @@
- + CUSTOMER NAME:

{{cusName}}

+
@@ -293,7 +294,7 @@
- +
diff --git a/src/app/pages/summary-list/summary-details/summary-details.component.ts b/src/app/pages/summary-list/summary-details/summary-details.component.ts index dba91c8..73fc3bc 100644 --- a/src/app/pages/summary-list/summary-details/summary-details.component.ts +++ b/src/app/pages/summary-list/summary-details/summary-details.component.ts @@ -20,7 +20,7 @@ export class SummaryDetailsComponent implements OnInit { // moment().subtract(1, 'month').endOf('month') // ] }; - productlistReturn:any =[];orderId:any=[]; + productlistReturn:any =[];orderId:any=[];cusName:any =[]; selectedDateRange:any =[];drivers:any =[];summaryaData:any=[];driverval:any=[];returnSummary:any =[];productlist:any=[]; constructor(public _api:PageapiService,private route: ActivatedRoute, private router:Router) { @@ -57,6 +57,8 @@ this.orderId = orderId } ngOnInit(): void { + + this.cusName = localStorage.getItem('cusName') this.selectedDateRange =[]; console.log(moment()['_d']) diff --git a/src/app/pages/summary-list/summary-list.component.html b/src/app/pages/summary-list/summary-list.component.html index 634207b..2823333 100644 --- a/src/app/pages/summary-list/summary-list.component.html +++ b/src/app/pages/summary-list/summary-list.component.html @@ -24,8 +24,11 @@
-
-
+
+ + + + + Select Drivers + + {{user.userName }} - {{user.userName }} - - -
+ + + + + +
+
+ +
+ vnms + + + +
+
+
Driver Name: {{driverName}}
+
+
+
Delivery Summary
+
+
+
+ Date :{{DateDisplay | date :'dd/MM/yy'}} +
+
+
+ +
@@ -66,7 +96,7 @@ -
+
@@ -74,6 +104,14 @@
+ +
+
+ + + +
+
@@ -84,7 +122,7 @@
-
+
@@ -92,28 +130,21 @@
-
- - - - - -
- -
+
+ + +
+
+
- +
No Data Available ...!
-
+
@@ -123,49 +154,54 @@
- +
+ + +
+
+ + + + +
+
-
+
+
-
+
+
-
- - - - - - -
-
+
+ + + +
+
- +
diff --git a/src/app/pages/summary-list/summary-list.component.ts b/src/app/pages/summary-list/summary-list.component.ts index 4937844..bea421a 100644 --- a/src/app/pages/summary-list/summary-list.component.ts +++ b/src/app/pages/summary-list/summary-list.component.ts @@ -2,6 +2,7 @@ import { Component, OnInit } from '@angular/core'; import * as moment from 'moment'; import { PageapiService } from '../pageapi.service'; import { Router } from '@angular/router'; +import * as html2pdf from 'html2pdf.js' @Component({ selector: 'ngx-summary-list', templateUrl: './summary-list.component.html', @@ -18,7 +19,7 @@ export class SummaryListComponent implements OnInit { // moment().subtract(1, 'month').startOf('month'), // moment().subtract(1, 'month').endOf('month') // ] - }; + };selectDate:any =[];driverId:any =[];DateDisplay:any =[];driverName:any =[]; selectedDateRange:any =[];drivers:any =[];summaryaData:any=[];driverval:any=[];returnSummary:any =[]; constructor(public _api:PageapiService, private router:Router) { } @@ -104,7 +105,7 @@ export class SummaryListComponent implements OnInit { val(data){ console.log(data.id) - + this.driverName = data.userName let result; if(this.selectedDateRange.length != 0){ result= this.selectedDateRange.endDate['$d'] @@ -112,41 +113,8 @@ export class SummaryListComponent implements OnInit { result = moment()['_d'] } - - console.log(result) - let param ={date:new Date(result),id:data.id} - this._api.getDriverSummaryAdminList(param).subscribe(res => { - console.log(res) - if(res.status == 200){ + this. driverId = data.id - console.log(res.data) - - this.summaryaData = res.data - this.summaryaData.forEach(element => { - element.name = element['UserDetails.userName'] - - }); - - this.mergeOrders( this.summaryaData) - - } - }) - - this._api.getReturnDriverSummaryListadmin(param).subscribe(res => { - console.log(res) - if(res.status == 200){ - - console.log(res.data) - - this.returnSummary = res.data - - - - // this.mergeOrders( this.summaryaData) - - } - }) - } @@ -163,8 +131,87 @@ console.log(result) } - view(data){ + view(data,name){ + localStorage.setItem('cusName',name) this.router.navigate(['/pages/summary/'+data]) } + + + onStartDateChanged(data){ + this.DateDisplay = data + this.selectDate =[]; + this.selectDate.push(data) + //this.selectDate = data + console.log(data) + + } + generate(){ + + const utcDate = new Date(this.selectDate[0]); + + // Add one day to the UTC date + utcDate.setDate(utcDate.getDate() + 1); + + // Convert the updated date to a UTC string + const updatedUtcDate = utcDate.toISOString(); + console.log(updatedUtcDate) + + let param ={date:new Date( updatedUtcDate),id:this.driverId} + this._api.getDriverSummaryAdminList(param).subscribe(res => { + console.log(res) + if(res.status == 200){ + + console.log(res.data) + + this.summaryaData = res.data + if( this.summaryaData.length>0){ + this.summaryaData.forEach(element => { + element.name = element['UserDetails.userName'] + + }); + } + + + this.mergeOrders( this.summaryaData) + + }else{ + this.summaryaData =[]; + } + }) + + this._api.getReturnDriverSummaryListadmin(param).subscribe(res => { + console.log(res) + if(res.status == 200){ + + console.log(res.data) + + this.returnSummary = res.data + + + + // this.mergeOrders( this.summaryaData) + + }else{ + this.returnSummary =[]; + } + }) + + + } + + download(){ + var element = document.getElementById('table'); +var opt = { + margin: 1, + filename: 'sheet.pdf', + image: { type: 'jpg', quality: 0.98 }, + html2canvas: { scale: 2 }, + jsPDF: { unit: 'in', format: 'letter', orientation: 'portrait' } +}; + +// New Promise-based usage: +html2pdf().from(element).set(opt).save(); + } + } diff --git a/src/app/pages/users/user-form/user-form.component.html b/src/app/pages/users/user-form/user-form.component.html index 208aa21..b652d15 100644 --- a/src/app/pages/users/user-form/user-form.component.html +++ b/src/app/pages/users/user-form/user-form.component.html @@ -17,8 +17,8 @@ Please enter a valid email address
- - + + diff --git a/src/app/pages/users/user-form/user-form.component.ts b/src/app/pages/users/user-form/user-form.component.ts index 12b4fea..5aa4b94 100644 --- a/src/app/pages/users/user-form/user-form.component.ts +++ b/src/app/pages/users/user-form/user-form.component.ts @@ -38,6 +38,7 @@ export class UserFormComponent implements OnInit { }); if(this.data.hasOwnProperty('id')){ + delete this.data.password this.userForm.controls['password'].clearValidators(); this.userForm.controls['password'].updateValueAndValidity(); } @@ -57,13 +58,22 @@ export class UserFormComponent implements OnInit { this.formData= new FormData(); if(this.data.hasOwnProperty('id')){ this.formData.append('id', this.data.id); - - } - this.formData.append('userName',tmp.userName) + this.formData.append('userName',tmp.userName) this.formData.append('email', tmp.email); - this.formData.append('password', tmp.password); + if(tmp.password != ""){ + this.formData.append('password', tmp.password); + } + this.formData.append('role', tmp.role); this.formData.append('mobileNo', tmp.mobileNo); + } else{ + this.formData.append('userName',tmp.userName) + this.formData.append('email', tmp.email); + this.formData.append('password', tmp.password); + this.formData.append('role', tmp.role); + this.formData.append('mobileNo', tmp.mobileNo); + } + this._api.addUserFormDetails (this.formData).subscribe(res => { if (res.status == 200) { diff --git a/src/app/pages/users/users.component.html b/src/app/pages/users/users.component.html index 7c461a5..3315aa1 100644 --- a/src/app/pages/users/users.component.html +++ b/src/app/pages/users/users.component.html @@ -130,15 +130,16 @@ -
+
- + - +
diff --git a/src/app/pages/users/users.component.ts b/src/app/pages/users/users.component.ts index c501674..4cbd6f7 100644 --- a/src/app/pages/users/users.component.ts +++ b/src/app/pages/users/users.component.ts @@ -110,9 +110,9 @@ export class UsersComponent { console.log(res) this.getuserlistApi(); if(event.isActive == 1){ - this.showToast('success', 'Data Removed Successfully', 'Active User Data Completed..!'); + this.showToast('success', 'Active User Data Completed..!', ''); }else{ - this.showToast('success', 'Data Removed Successfully', 'Inactive User Data Completed..!'); + this.showToast('success', 'Inactive User Data Completed..!', ''); } }else{ diff --git a/src/environments/environment.ts b/src/environments/environment.ts index 0e99785..21fcd30 100644 --- a/src/environments/environment.ts +++ b/src/environments/environment.ts @@ -9,8 +9,8 @@ // The list of which env maps to which file can be found in `.angular-cli.json`. export const environment = { -//apiEndpoint:'https://dev.venbait.in/vnms/api/', -apiEndpoint:'http://192.168.1.29:8081/api/', + apiEndpoint:'https://dev.venbait.in/vnms/api/', + // apiEndpoint:'http://192.168.1.17:8081/api/', mailUrl:'', production: false, };