From 77cb35e5bac0bcf0a0d5ab7b3720e6f1f370fef7 Mon Sep 17 00:00:00 2001 From: Venba Date: Fri, 10 Nov 2023 18:58:32 +0530 Subject: [PATCH] filter option --- android/app/capacitor.build.gradle | 1 + android/capacitor.settings.gradle | 3 + capacitor.config.ts | 12 ++ src/app/authencation/login/login.component.ts | 5 +- src/app/pages/page.module.ts | 7 +- .../pd-advance-filter.component.html | 82 ++++++++++ .../pd-advance-filter.component.scss | 33 ++++ .../pd-advance-filter.component.spec.ts | 24 +++ .../pd-advance-filter.component.ts | 141 ++++++++++++++++++ src/app/pages/pd-list/pd-list.component.html | 32 +++- src/app/pages/pd-list/pd-list.component.ts | 86 ++++++++++- src/providers/pdtrigger/pdtrigger.service.ts | 10 ++ src/shared/shared.module.ts | 10 +- src/theme/variables.scss | 4 +- 14 files changed, 436 insertions(+), 14 deletions(-) create mode 100644 src/app/pages/pd-list/pd-advance-filter/pd-advance-filter.component.html create mode 100644 src/app/pages/pd-list/pd-advance-filter/pd-advance-filter.component.scss create mode 100644 src/app/pages/pd-list/pd-advance-filter/pd-advance-filter.component.spec.ts create mode 100644 src/app/pages/pd-list/pd-advance-filter/pd-advance-filter.component.ts diff --git a/android/app/capacitor.build.gradle b/android/app/capacitor.build.gradle index c35a970..ea1168d 100644 --- a/android/app/capacitor.build.gradle +++ b/android/app/capacitor.build.gradle @@ -13,6 +13,7 @@ dependencies { implementation project(':capacitor-camera') implementation project(':capacitor-haptics') implementation project(':capacitor-keyboard') + implementation project(':capacitor-splash-screen') implementation project(':capacitor-status-bar') implementation "androidx.core:core:1.6.+" } diff --git a/android/capacitor.settings.gradle b/android/capacitor.settings.gradle index e968608..8f7820d 100644 --- a/android/capacitor.settings.gradle +++ b/android/capacitor.settings.gradle @@ -14,5 +14,8 @@ project(':capacitor-haptics').projectDir = new File('../node_modules/@capacitor/ include ':capacitor-keyboard' project(':capacitor-keyboard').projectDir = new File('../node_modules/@capacitor/keyboard/android') +include ':capacitor-splash-screen' +project(':capacitor-splash-screen').projectDir = new File('../node_modules/@capacitor/splash-screen/android') + include ':capacitor-status-bar' project(':capacitor-status-bar').projectDir = new File('../node_modules/@capacitor/status-bar/android') diff --git a/capacitor.config.ts b/capacitor.config.ts index ce90264..7a75125 100644 --- a/capacitor.config.ts +++ b/capacitor.config.ts @@ -6,6 +6,18 @@ const config: CapacitorConfig = { webDir: 'www', server: { androidScheme: 'https' + }, + plugins:{ + SplashScreen:{ + launchShowDuration:2000, + backgroundColor:"#fff", + showSpinner:false, + androidSpinnerStyle:"small", + iosSpinnerStyle:"small", + splashFullScreen:true, + splashImmersive:true, + + } } }; diff --git a/src/app/authencation/login/login.component.ts b/src/app/authencation/login/login.component.ts index c068efe..92b5c76 100644 --- a/src/app/authencation/login/login.component.ts +++ b/src/app/authencation/login/login.component.ts @@ -7,6 +7,7 @@ import { PdtriggerService } from 'src/providers/pdtrigger/pdtrigger.service'; import { environment } from 'src/environments/environment'; import { ToastService } from 'src/providers/common-provider/toast.service'; import { OtpComponent } from '../otp/otp/otp.component'; +import { PdAdvanceFilterComponent } from 'src/app/pages/pd-list/pd-advance-filter/pd-advance-filter.component'; @Component({ selector: 'app-login', @@ -198,6 +199,8 @@ getCommonSettings(){ const email = this.loginForm.get('email').value; const password = this.loginForm.get('password').value; return !email && !password; -} + } + + } diff --git a/src/app/pages/page.module.ts b/src/app/pages/page.module.ts index 60f623f..c10003b 100644 --- a/src/app/pages/page.module.ts +++ b/src/app/pages/page.module.ts @@ -5,14 +5,19 @@ import { PageRoutingModule } from './page-routing.module'; import { PdListComponent } from './pd-list/pd-list.component'; import { IonicModule } from '@ionic/angular'; import { SharedModule } from 'src/shared/shared.module'; +import { PdAdvanceFilterComponent } from './pd-list/pd-advance-filter/pd-advance-filter.component'; +import { ReactiveFormsModule } from '@angular/forms'; +import { MatNativeDateModule } from '@angular/material/core'; @NgModule({ - declarations: [PdListComponent], + declarations: [PdListComponent,PdAdvanceFilterComponent], imports: [ CommonModule, PageRoutingModule, SharedModule, + ReactiveFormsModule, + MatNativeDateModule, IonicModule.forRoot(), ] }) diff --git a/src/app/pages/pd-list/pd-advance-filter/pd-advance-filter.component.html b/src/app/pages/pd-list/pd-advance-filter/pd-advance-filter.component.html new file mode 100644 index 0000000..c55dd7c --- /dev/null +++ b/src/app/pages/pd-list/pd-advance-filter/pd-advance-filter.component.html @@ -0,0 +1,82 @@ + + + +  Advanced Filter + + + + + + + + + + + +
+ + + {{status.pd_status_name}} + + + + + + + + + + + + + + + + {{pro.abbr}} + + + + + + + + + +
+
+ +
+ + + + + + + + + + + + + diff --git a/src/app/pages/pd-list/pd-advance-filter/pd-advance-filter.component.scss b/src/app/pages/pd-list/pd-advance-filter/pd-advance-filter.component.scss new file mode 100644 index 0000000..8297fb6 --- /dev/null +++ b/src/app/pages/pd-list/pd-advance-filter/pd-advance-filter.component.scss @@ -0,0 +1,33 @@ +@import '../../../../theme/filter-modal.scss'; + + +::ng-deep .toolbar-background{ + --background: none; /* Set it to none to clear the background */ + border-color: #b2b2b2 ; + background: #fff !important; + + } + .toolbar-title-md{ + color: #fff !important; + } + + ::ng-deep .filterModal { + --width: 82% !important; + --height: 80% !important; + --max-width: 52vh !important; + --max-height: 77vh !important; + --border-radius: 10px; +} +.mt{ + margin-top: 2rem; +} + +.cardUI{ + padding: 1rem; + box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); + background-color: #ffffff61; + // border-radius: 10px; +} +::ng-deep .mdc-text-field--filled:not(.mdc-text-field--disabled) { + background-color: unset !important; +} \ No newline at end of file diff --git a/src/app/pages/pd-list/pd-advance-filter/pd-advance-filter.component.spec.ts b/src/app/pages/pd-list/pd-advance-filter/pd-advance-filter.component.spec.ts new file mode 100644 index 0000000..594de30 --- /dev/null +++ b/src/app/pages/pd-list/pd-advance-filter/pd-advance-filter.component.spec.ts @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { IonicModule } from '@ionic/angular'; + +import { PdAdvanceFilterComponent } from './pd-advance-filter.component'; + +describe('PdAdvanceFilterComponent', () => { + let component: PdAdvanceFilterComponent; + let fixture: ComponentFixture; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [ PdAdvanceFilterComponent ], + imports: [IonicModule.forRoot()] + }).compileComponents(); + + fixture = TestBed.createComponent(PdAdvanceFilterComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + })); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/pages/pd-list/pd-advance-filter/pd-advance-filter.component.ts b/src/app/pages/pd-list/pd-advance-filter/pd-advance-filter.component.ts new file mode 100644 index 0000000..acff1d7 --- /dev/null +++ b/src/app/pages/pd-list/pd-advance-filter/pd-advance-filter.component.ts @@ -0,0 +1,141 @@ +import { DatePipe } from '@angular/common'; +import { Component, OnInit } from '@angular/core'; +import { FormBuilder, FormGroup } from '@angular/forms'; +import { ModalController, NavController, NavParams } from '@ionic/angular'; +import { AuthService } from 'src/app/authencation/auth-service/auth.service'; +import { LoadingService } from 'src/providers/common-provider/loading.service'; +import { ToastService } from 'src/providers/common-provider/toast.service'; +import { PdtriggerService } from 'src/providers/pdtrigger/pdtrigger.service'; + +@Component({ + selector: 'app-pd-advance-filter', + templateUrl: './pd-advance-filter.component.html', + styleUrls: ['./pd-advance-filter.component.scss'], +}) +export class PdAdvanceFilterComponent implements OnInit { + todaydate: Date; + from_page: any; + drop_down_datas: any; + searchForm:FormGroup | any; + PRODUCTS: any=[]; + pdStatus: any; + ENTITY: any=[]; + xpandStatus: boolean = false; + pipe=new DatePipe('en-US'); + + constructor(private pdTriggerProvider:PdtriggerService,private _fb:FormBuilder,private modalController: ModalController,public navCtrl: NavController, public navParams: NavParams,public aws: AuthService,private toastProvider:ToastService,private loaderProvider:LoadingService) { + this.todaydate = new Date(); + this.getDropdown(); + this.from_page = this.navParams.get('FormDet'); + console.log(this.from_page); + if(this.from_page){ + this.from_page =this.from_page.from_page + } + } + + ngOnInit() { + let users:any = localStorage.getItem('user_details') + let local:any = JSON.parse(users); + console.log('local****',local); + this.drop_down_datas = this.navParams.get('drop_down_datas'); + console.log(this.drop_down_datas) + this.setDropDownDatas() + console.log(this.drop_down_datas); + this.searchForm = this._fb.group({ + pd_status:[''], + pd_from_date:[''], + pd_to_date:[''], + pd_products:[''], + pd_lender:[local.fk_entity_id], + pd_applicant_name:[''], + // pd_officer:[''], + // pd_officer_id:[''], + // pd_type:[''], + // pd_name:[null], + // pd_applicant_id:[null], + }) + console.log(this.drop_down_datas) + } + + getDropdown(){ + this.pdTriggerProvider.getAllMasterDatas('PRODUCTS').subscribe((res:any)=>{ + if(res.dataStatus==true) + { + this.PRODUCTS = res.records.filter((pro:any)=>pro.isactive==1); + } + }); + this.pdTriggerProvider.getAllMasterDatas("PDSTATUS").subscribe((res:any)=>{ + if(res.dataStatus==true) + { + this.pdStatus = res.records.filter((pro:any)=>(pro.isactive==1)); + } + }); + } + + setDropDownDatas(){ + console.log(this.drop_down_datas) + if(this.drop_down_datas != undefined){ + this.pdStatus=this.drop_down_datas.pd_status + if(this.ENTITY.length != 0) { + this.entityCheck() + } + else{ + setTimeout(()=>{this.entityCheck()},500) + } + if(this.PRODUCTS.length != 0) { + this.productCheck() + } + else{ + setTimeout(()=>{this.productCheck()},500) + } + } + } + productCheck(){ + this.PRODUCTS=this.PRODUCTS.filter((val:any)=>{ + if(this.drop_down_datas.product_ids.filter((dp:any)=>dp == val.product_id).length > 0){ + return val + } + }) + } + + entityCheck(){ + this.ENTITY=this.ENTITY.filter((val:any)=>{ + if(this.drop_down_datas.lender_ids.filter((dp:any)=>dp == val.entity_id).length > 0){ + return val + } + }) + } + + searchItem(){ + this.loaderProvider.pdloader('fetching data') + this.searchForm.value.pd_from_date = this.pipe.transform(this.searchForm.value.pd_from_date,'yyyy-MM-dd'); + this.searchForm.value.pd_to_date = this.pipe.transform(this.searchForm.value.pd_to_date,'yyyy-MM-dd'); + // console.log(JSON.stringifythis.searchForm.value); + this.xpandStatus=true; + this.pdTriggerProvider.advancedFilter(this.searchForm.value).subscribe(res=>{ + if(res.dataStatus){ + console.log(res); + this.loaderProvider.dismissLoader(); + this.modalController.dismiss(res['records']); + } + else{ + // this.filteredlistData.emit(res) + this.loaderProvider.dismissLoader() + this.toastProvider.lenderappmessage('No Records Found...!') + } + }) + } + + onReset(){ + this.searchForm.reset(); + let users:any = localStorage.getItem('user_details') + let local:any = JSON.parse(users); + local=local.fk_entity_id + this.searchForm.controls['pd_lender'].setValue(local); + } + + closeModal() { + this.modalController.dismiss(); + } + +} diff --git a/src/app/pages/pd-list/pd-list.component.html b/src/app/pages/pd-list/pd-list.component.html index c1fcff3..fbb5402 100644 --- a/src/app/pages/pd-list/pd-list.component.html +++ b/src/app/pages/pd-list/pd-list.component.html @@ -5,10 +5,10 @@ Sales PD List + @@ -18,14 +18,36 @@ - + --> + + + + + + + + + + + + + + + + + + + + + + @@ -73,9 +95,9 @@ - + diff --git a/src/app/pages/pd-list/pd-list.component.ts b/src/app/pages/pd-list/pd-list.component.ts index 55e0f80..10df089 100644 --- a/src/app/pages/pd-list/pd-list.component.ts +++ b/src/app/pages/pd-list/pd-list.component.ts @@ -7,6 +7,7 @@ import { IonicStorageService } from 'src/providers/ionic-storage/ionic-storage.s import { SalesPdService } from '../providers/sales-pd/sales-pd.service'; import { environment } from 'src/environments/environment'; import { Camera, CameraResultType } from '@capacitor/camera'; +import { PdAdvanceFilterComponent } from './pd-advance-filter/pd-advance-filter.component'; const pd_key ='local_sales_PDs' @@ -29,8 +30,16 @@ export class PdListComponent implements OnInit { visibleItems: any[] = []; // Items to display in the current view itemsPerView = 10; // Number of items to display at a time startIndex = 0; // Start index of the visible range + pdlistaccess:boolean = false; + pdinprogress: any=[]; + pdlistdetails: any=[]; + searchinprogress: any; + searchpast: any; + bgColor: any=[]; + status: any; + bgColorPast: any=[]; - constructor(public Menu:MenuController,public aws:AuthService,public actionSheetCtrl: ActionSheetController,public navCtrl: NavController,private toastProvider:ToastService,private loaderProvider:LoadingService,private modalCtrl:ModalController, + constructor(private modalController: ModalController,public Menu:MenuController,public aws:AuthService,public actionSheetCtrl: ActionSheetController,public navCtrl: NavController,private toastProvider:ToastService,private loaderProvider:LoadingService,private modalCtrl:ModalController, private ionicStorageService:IonicStorageService,public salesPDService:SalesPdService) { let userDetails:any = localStorage.getItem('user_details'); @@ -320,4 +329,79 @@ export class PdListComponent implements OnInit { const theActualPicture = image.dataUrl; } + async openFilterModal() { + const modalOption = { + cssClass: 'filterModal' + }; + + const modal = await this.modalController.create({ + component: PdAdvanceFilterComponent, + componentProps: { 'drop_down_datas': this.filter_drop_down_data }, + ...modalOption + }); + + await modal.present(); + + const { data } = await modal.onDidDismiss(); + + if (data) { + // this.sales_displayValue = data; + this.filterMsg=false + this.loader_access=false + this.pdlistaccess = true; + this.pdinprogress = data.filter((past:any)=>past.pd_status !="QC_COMPLETED"); + this.searchinprogress = this.pdinprogress; + this.pdlistdetails = data.filter((past:any)=>past.pd_status =="QC_COMPLETED"); + this.searchpast = this.pdlistdetails; + + //FOR SPLITTING THE VALUE OF pd_sno + this.pdinprogress.length >0 ? + this.pdinprogress.forEach((value:any)=>{ + let original=value.pd_sno + if(original != null){ + value.pd_sno_split={lender_name:original.replace(/[^a-z]/gi, ''),serial_no:original.match(/(\d+)/)[0]} + } + else{ + value.pd_sno_split={lender_name:'',serial_no:''} + } + }) : this.pdinprogress + + this.pdlistdetails.length >0 ? + this.pdlistdetails.forEach((value:any)=>{ + let original=value.pd_sno + if(original != null){ + value.pd_sno_split={lender_name:original.replace(/[^a-z]/gi, ''),serial_no:original.match(/(\d+)/)[0]} + } + else{ + value.pd_sno_split={lender_name:'',serial_no:''} + } + }) : this.pdlistdetails + + console.log("ingp",this.pdinprogress); + this.random_bg_color(); + this.random_ng_past(); + } + } + + random_bg_color() { + for(let id of this.pdinprogress){ + var x = Math.floor(Math.random() * 256); + var y = Math.floor(Math.random() * 256); + var z = Math.floor(Math.random() * 256); + this.bgColor.push("rgb(" + x + "," + y + "," + z + ")"); + } + return this.bgColor; + } + + random_ng_past(){ + for(let id of this.pdlistdetails){ + this.status = id.pd_status.replace("_"," "); + var x = Math.floor(Math.random() * 256); + var y = Math.floor(Math.random() * 256); + var z = Math.floor(Math.random() * 256); + this.bgColorPast.push("rgb(" + x + "," + y + "," + z + ")"); + + } + } + } diff --git a/src/providers/pdtrigger/pdtrigger.service.ts b/src/providers/pdtrigger/pdtrigger.service.ts index b00a2b3..40e6f40 100644 --- a/src/providers/pdtrigger/pdtrigger.service.ts +++ b/src/providers/pdtrigger/pdtrigger.service.ts @@ -91,5 +91,15 @@ export class PdtriggerService { } + getAllMasterDatas(TableName: string): Observable { + return this.http.post(this.apiUrl + 'getListOfMaster', { "master_name": TableName }) + .pipe( + // catchError(this.handleError('role', [])) + ) + } + advancedFilter(params:any): Observable{ + return this.http.post(this.apiUrl+'filterPDList',{"records":params}) + } + } diff --git a/src/shared/shared.module.ts b/src/shared/shared.module.ts index 51a2b89..4a87f22 100644 --- a/src/shared/shared.module.ts +++ b/src/shared/shared.module.ts @@ -12,6 +12,8 @@ import { MatFormFieldModule } from '@angular/material/form-field'; import { MatIconModule } from '@angular/material/icon'; import { MatGridListModule } from '@angular/material/grid-list'; import { MatListModule } from '@angular/material/list'; +import { MatDatepickerModule } from '@angular/material/datepicker' +import { MatSelectModule } from '@angular/material/select' @@ -28,7 +30,7 @@ import { MatListModule } from '@angular/material/list'; MatCheckboxModule, MatChipsModule, MatTableModule, - // MatDatepickerModule, + MatDatepickerModule, // MatDialogModule, // MatDividerModule, // MatExpansionModule, @@ -42,7 +44,7 @@ import { MatListModule } from '@angular/material/list'; // MatProgressSpinnerModule, // MatRadioModule, // MatRippleModule, - // MatSelectModule, + MatSelectModule, // MatSidenavModule, // MatSlideToggleModule, // MatSliderModule, @@ -72,7 +74,7 @@ import { MatListModule } from '@angular/material/list'; MatCheckboxModule, MatChipsModule, MatTableModule, - // MatDatepickerModule, + MatDatepickerModule, // MatDialogModule, // MatDividerModule, // MatExpansionModule, @@ -86,7 +88,7 @@ import { MatListModule } from '@angular/material/list'; // MatProgressSpinnerModule, // MatRadioModule, // MatRippleModule, - // MatSelectModule, + MatSelectModule, // MatSidenavModule, // MatSlideToggleModule, // MatSliderModule, diff --git a/src/theme/variables.scss b/src/theme/variables.scss index 84bbe62..f1ab842 100644 --- a/src/theme/variables.scss +++ b/src/theme/variables.scss @@ -197,7 +197,7 @@ */ .md body { - --ion-background-color: #ccc; + --ion-background-color: #ffffff; --ion-background-color-rgb: 18,18,18; --ion-text-color: #ffffff; @@ -231,7 +231,7 @@ --ion-tab-bar-background: #ff0000; - --ion-card-background: #1e1e1e; + --ion-card-background: #1e1e1e; } }