assessed income changes
This commit is contained in:
parent
f9dcea67f3
commit
80ad486e43
@ -0,0 +1,55 @@
|
|||||||
|
<form [formGroup]="businessItemForm" novalidate>
|
||||||
|
|
||||||
|
<h2 mat-dialog-title class="paragraph_change">
|
||||||
|
<div fxFlex="70" align="left" style="padding: 10px !important;">
|
||||||
|
{{pageTitle}}
|
||||||
|
</div>
|
||||||
|
<div fxFlex="30" align="end" style="padding: 10px !important;">
|
||||||
|
<button mat-raised-button mat-icon-button class="mr-1 mb-1 hover-icon" type="button" matTooltip="Close" matTooltipPosition="above" (click)="closeDialogue()"><mat-icon>close</mat-icon></button>
|
||||||
|
</div>
|
||||||
|
</h2>
|
||||||
|
<mat-dialog-content>
|
||||||
|
<mat-card>
|
||||||
|
<mat-card-content formArrayName="busExpense">
|
||||||
|
<div fxLayout="row wrap" *ngFor="let item of businessItemForm.controls.busExpense['controls']; let s = index;" [formGroupName]="s">
|
||||||
|
<div fxFlex="100">
|
||||||
|
<mat-form-field style="width: 87%">
|
||||||
|
<mat-select placeholder="Buiness Expense" formControlName="expense_item_id" required>
|
||||||
|
<mat-option *ngFor="let expense of businessExpenseData" [value]="expense.expense_item_id">{{expense.expense_item}}</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
<button type="button" class="mr-1 mb-1 hover-icon" mat-raised-button mat-icon-button (click)="removeItem(s)" *ngIf="s>0"
|
||||||
|
matTooltip="Remove Business Expense Item" matTooltipPosition="above">
|
||||||
|
<mat-icon>delete</mat-icon>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="item-margin" fxFlex="100">
|
||||||
|
<mat-form-field style="width: 25%">
|
||||||
|
<input OnlyNumber type="text" matInput placeholder="Amount (Rs)" (keyup)="businessCalculation(s,item.value)" formControlName="expense_value" required>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width: 25%">
|
||||||
|
<mat-select placeholder="Frequency" formControlName="fk_frequency_id" (selectionChange)="businessCalculation(s,item.value)" required>
|
||||||
|
<mat-option *ngFor="let frq of frequencyData" [value]="frq.frequency_id">{{frq.name}}</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width: 25%">
|
||||||
|
<input matInput OnlyNumber type="text" placeholder="Annual Expenses" formControlName="annual_expenses_value" readonly>
|
||||||
|
</mat-form-field>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div fxLayout="row" *ngIf="data.manage_status==1">
|
||||||
|
<div fxFlex="100" align="center">
|
||||||
|
<button type="button" mat-flat-button (click)="addMore()"
|
||||||
|
matTooltip="Add More" matTooltipPosition="above" color="primary">
|
||||||
|
<strong>Add More Business Expense Item</strong>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</mat-card-content>
|
||||||
|
</mat-card>
|
||||||
|
<notifier-container></notifier-container>
|
||||||
|
</mat-dialog-content>
|
||||||
|
<mat-dialog-actions align="end">
|
||||||
|
<button mat-raised-button mat-icon-button class="mr-1 mb-1 hover-icon" type="button" matTooltip="Save" matTooltipPosition="above" (click)="submitDetails(businessItemForm.value)"><mat-icon>save</mat-icon></button>
|
||||||
|
</mat-dialog-actions>
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
.paragraph_change {
|
||||||
|
color: #fff !important;
|
||||||
|
background-color: #e00201 !important;
|
||||||
|
}
|
||||||
|
mat-form-field {
|
||||||
|
margin: 0 2%;
|
||||||
|
}
|
||||||
|
.example-section {
|
||||||
|
height: 120px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.example-margin {
|
||||||
|
margin: 0 10px;
|
||||||
|
}
|
||||||
|
::ng-deep .cdk-global-overlay-wrapper{
|
||||||
|
justify-content: center !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-margin {
|
||||||
|
margin-left: 2%;
|
||||||
|
}
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { ManageBusinesExpenseComponent } from './manage-busines-expense.component';
|
||||||
|
|
||||||
|
describe('ManageBusinesExpenseComponent', () => {
|
||||||
|
let component: ManageBusinesExpenseComponent;
|
||||||
|
let fixture: ComponentFixture<ManageBusinesExpenseComponent>;
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
declarations: [ ManageBusinesExpenseComponent ]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
fixture = TestBed.createComponent(ManageBusinesExpenseComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
@ -0,0 +1,125 @@
|
|||||||
|
import { Component, OnInit, Input, Output, Inject } from '@angular/core';
|
||||||
|
import { FormBuilder, FormGroup, Validators, FormControl, FormArray } from '@angular/forms';
|
||||||
|
import { MatDialog, MatDialogRef, MAT_DIALOG_DATA , DialogPosition} from '@angular/material';
|
||||||
|
import { PdTrigerService } from './../../../../../../../pd-service/pd-triger.service';
|
||||||
|
import { NotifierService } from 'angular-notifier';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-manage-busines-expense',
|
||||||
|
templateUrl: './manage-busines-expense.component.html',
|
||||||
|
styleUrls: ['./manage-busines-expense.component.scss']
|
||||||
|
})
|
||||||
|
export class ManageBusinesExpenseComponent implements OnInit {
|
||||||
|
|
||||||
|
pageTitle:string;
|
||||||
|
businessItemForm:FormGroup;
|
||||||
|
frequencyData: any[]=[];
|
||||||
|
businessExpenseData: any[]=[];
|
||||||
|
private notifier: NotifierService;
|
||||||
|
constructor(notifier: NotifierService,private _fb: FormBuilder, private _pd: PdTrigerService, @Inject(MAT_DIALOG_DATA) public data: any, private dialogRef: MatDialogRef<ManageBusinesExpenseComponent>) {
|
||||||
|
this.frequencyData=this.data.masterData.frequencyList;
|
||||||
|
this.businessExpenseData = this.data.masterData.businessExpenseList;
|
||||||
|
this.pageTitle = this.data.manage_status==1 ? 'Add Business Expense Item' : 'Update Business Expense Item';
|
||||||
|
this.notifier = notifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
if(this.data.manage_status==2){
|
||||||
|
this.businessItemForm = this._fb.group({
|
||||||
|
busExpense: this._fb.array([this.createBusinessItemWithData(this.data.editData)]),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
this.businessItemForm = this._fb.group({
|
||||||
|
busExpense: this._fb.array([this.createBusinessItem()]),
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// add business item details
|
||||||
|
createBusinessItem():FormGroup {
|
||||||
|
return this._fb.group({
|
||||||
|
pd_expense_id:[''],
|
||||||
|
fk_pd_id:[this.data.masterData.pdid],
|
||||||
|
expense_item_id:['',Validators.compose([Validators.required])],
|
||||||
|
expense_value:['',Validators.compose([Validators.required])],
|
||||||
|
fk_frequency_id:['',Validators.compose([Validators.required])],
|
||||||
|
annual_expenses_value:['',Validators.compose([Validators.required])],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// create form with data
|
||||||
|
createBusinessItemWithData(values: any) {
|
||||||
|
return this._fb.group({
|
||||||
|
pd_expense_id:[values.pd_expense_id],
|
||||||
|
fk_pd_id:[this.data.masterData.pdid],
|
||||||
|
expense_item_id:[values.expense_item_id,Validators.compose([Validators.required])],
|
||||||
|
expense_value:[values.expense_value,Validators.compose([Validators.required])],
|
||||||
|
fk_frequency_id:[values.fk_frequency_id,Validators.compose([Validators.required])],
|
||||||
|
annual_expenses_value:[values.annual_expenses_value,Validators.compose([Validators.required])],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// add more item
|
||||||
|
addMore(): void{
|
||||||
|
let control = <FormArray>this.businessItemForm.controls['busExpense'];
|
||||||
|
control.push(this.createBusinessItem());
|
||||||
|
}
|
||||||
|
|
||||||
|
// close dialogue manually
|
||||||
|
closeDialogue(){
|
||||||
|
this.dialogRef.close({update_status:false});
|
||||||
|
}
|
||||||
|
|
||||||
|
businessCalculation(indexVal: number,values: any): void {
|
||||||
|
let control:any = <FormArray>this.businessItemForm.controls['busExpense'];
|
||||||
|
if(values.expense_value!='' && values.fk_frequency_id!='') {
|
||||||
|
let filterFrequencyValue: any = this.frequencyData.filter(val =>val.frequency_id==values.fk_frequency_id);
|
||||||
|
control.controls[indexVal].controls['annual_expenses_value'].setValue(parseInt(values.expense_value) * parseInt(filterFrequencyValue[0].mutiple_factor));
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
control.controls[indexVal].controls['annual_expenses_value'].setValue('');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
removeItem(indexVal: number) : void {
|
||||||
|
let control = <FormArray>this.businessItemForm.controls['busExpense'];
|
||||||
|
control.removeAt(indexVal);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// save purchase details
|
||||||
|
submitDetails(records) {
|
||||||
|
if (this.businessItemForm.invalid) {
|
||||||
|
this.validateAllFormFields(this.businessItemForm);
|
||||||
|
this.notifier.notify('warning',"Please Check All Manatory Fields..");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this._pd.saveAssessedDetails('saveAssessedIncomeBusinessExpenses',records.busExpense).subscribe(data => {
|
||||||
|
this.notifier.notify('success', this.data.manage_status==2 ? 'Updated Successfully.' : 'Saved Successfully.');
|
||||||
|
setTimeout(() =>{
|
||||||
|
this.dialogRef.close({update_status:true});
|
||||||
|
},3000);
|
||||||
|
}, error => {
|
||||||
|
this.notifier.notify('warning', 'Something Wents Wrong Try Again.!');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// validate all form group and form array fields
|
||||||
|
validateAllFormFields(formGroup: any) {
|
||||||
|
Object.keys(formGroup.controls).forEach(field => {
|
||||||
|
const control = formGroup.get(field);
|
||||||
|
if (control instanceof FormControl) {
|
||||||
|
control.markAsTouched({ onlySelf: true });
|
||||||
|
} else if (control instanceof FormGroup) {
|
||||||
|
this.validateAllFormFields(control);
|
||||||
|
} else if (control instanceof FormArray) {
|
||||||
|
this.validateAllFormFields(control);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,72 @@
|
|||||||
|
<form [formGroup]="salesItemForm" novalidate>
|
||||||
|
|
||||||
|
<h2 mat-dialog-title class="paragraph_change">
|
||||||
|
<div fxFlex="70" align="left" style="padding: 10px !important;">
|
||||||
|
{{pageTitle}}
|
||||||
|
</div>
|
||||||
|
<div fxFlex="30" align="end" style="padding: 10px !important;">
|
||||||
|
<button mat-raised-button mat-icon-button class="mr-1 mb-1 hover-icon" type="button" matTooltip="Close" matTooltipPosition="above" (click)="closeDialogue()"><mat-icon>close</mat-icon></button>
|
||||||
|
</div>
|
||||||
|
</h2>
|
||||||
|
<mat-dialog-content>
|
||||||
|
<mat-card>
|
||||||
|
<mat-card-content formArrayName="sales_product">
|
||||||
|
<mat-card *ngFor="let sales of salesItemForm.controls.sales_product['controls']; let s = index;" [formGroupName]="s">
|
||||||
|
<mat-card-content>
|
||||||
|
<mat-form-field style="width: 35%">
|
||||||
|
<input type="text" matInput placeholder="Product/Services" formControlName="sales_item" required>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width: 20%" *ngIf="data.margin_calculation_status===true">
|
||||||
|
<input matInput OnlyNumber type="text" placeholder="Magin Percetage %" formControlName="margin_per" (keyup)="salesCalculation(s,sales.value)">
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width: 20%" *ngIf="data.margin_calculation_status===true">
|
||||||
|
<input matInput OnlyNumber type="text" placeholder="Margin Value" formControlName="margin_value" readonly>
|
||||||
|
</mat-form-field>
|
||||||
|
<button type="button" class="mr-1 mb-1 hover-icon" mat-raised-button mat-icon-button (click)="removeProducts(s)" *ngIf="(salesItemForm.controls.sales_product.value | deleteRecordsCount)>1"
|
||||||
|
matTooltip="Remove" matTooltipPosition="above">
|
||||||
|
<mat-icon>delete</mat-icon>
|
||||||
|
</button>
|
||||||
|
<div formArrayName="child">
|
||||||
|
<div class="item-margin" fxLayout="row wrap" *ngFor="let childItem of sales.get('child').controls; let c = index" [formGroupName]="c">
|
||||||
|
<div fxFlex="100" *ngIf="childItem.value.isactive===true">
|
||||||
|
<mat-form-field style="width: 25%;">
|
||||||
|
<input matInput [max]="maxDate" [matDatepicker]="picker" formControlName="sales_date" (dateChange)="salesCalculation(s,sales.value)" placeholder="Sales Date" required>
|
||||||
|
<mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
|
||||||
|
<mat-datepicker #picker></mat-datepicker>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width: 25%">
|
||||||
|
<input OnlyNumber type="text" matInput placeholder="Value" (keyup)="salesCalculation(s,sales.value,sales.value.child)" formControlName="sales_value" required>
|
||||||
|
</mat-form-field>
|
||||||
|
<button type="button" class="mr-1 mb-1 hover-icon" mat-raised-button mat-icon-button (click)="removeDailyItems(s,c,childItem.value)" *ngIf="(sales.value.child | deleteRecordsCount)>1"
|
||||||
|
matTooltip="Remove" matTooltipPosition="above">
|
||||||
|
<mat-icon>delete</mat-icon>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</mat-card-content>
|
||||||
|
<mat-card-actions align="center">
|
||||||
|
<button type="button" mat-flat-button (click)="addMoreDailySales(s,sales.value)"
|
||||||
|
matTooltip="Add More" matTooltipPosition="above" color="primary">
|
||||||
|
<strong>Add More Daily Sales</strong>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
</mat-card-actions>
|
||||||
|
</mat-card>
|
||||||
|
|
||||||
|
</mat-card-content>
|
||||||
|
<mat-card-actions align="center" *ngIf="data.manage_status==1">
|
||||||
|
<button type="button" mat-flat-button (click)="addMore(salesItemForm.controls.sales_product.value.length)"
|
||||||
|
matTooltip="Add More" matTooltipPosition="above" color="primary">
|
||||||
|
<strong>Add More Product/Services</strong>
|
||||||
|
</button>
|
||||||
|
</mat-card-actions>
|
||||||
|
</mat-card>
|
||||||
|
<notifier-container></notifier-container>
|
||||||
|
</mat-dialog-content>
|
||||||
|
<mat-dialog-actions align="end">
|
||||||
|
<button mat-raised-button mat-icon-button class="mr-1 mb-1 hover-icon" type="button" matTooltip="Save" matTooltipPosition="above" (click)="submitDetails(salesItemForm.value)"><mat-icon>save</mat-icon></button>
|
||||||
|
</mat-dialog-actions>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
.paragraph_change {
|
||||||
|
color: #fff !important;
|
||||||
|
background-color: #e00201 !important;
|
||||||
|
}
|
||||||
|
mat-form-field {
|
||||||
|
margin: 0 2%;
|
||||||
|
}
|
||||||
|
.example-section {
|
||||||
|
height: 120px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.example-margin {
|
||||||
|
margin: 0 10px;
|
||||||
|
}
|
||||||
|
::ng-deep .cdk-global-overlay-wrapper{
|
||||||
|
justify-content: center !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-margin {
|
||||||
|
margin-left: 2%;
|
||||||
|
}
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { ManageDailySalesComponent } from './manage-daily-sales.component';
|
||||||
|
|
||||||
|
describe('ManageDailySalesComponent', () => {
|
||||||
|
let component: ManageDailySalesComponent;
|
||||||
|
let fixture: ComponentFixture<ManageDailySalesComponent>;
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
declarations: [ ManageDailySalesComponent ]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
fixture = TestBed.createComponent(ManageDailySalesComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
@ -0,0 +1,213 @@
|
|||||||
|
import { Component, OnInit, Input, Output, Inject } from '@angular/core';
|
||||||
|
import { FormBuilder, FormGroup, Validators, FormControl, FormArray } from '@angular/forms';
|
||||||
|
import { MatDialog, MatDialogRef, MAT_DIALOG_DATA , DialogPosition} from '@angular/material';
|
||||||
|
import { PdTrigerService } from './../../../../../../../pd-service/pd-triger.service';
|
||||||
|
import { NotifierService } from 'angular-notifier';
|
||||||
|
import { DatePipe } from '@angular/common';
|
||||||
|
import { DeleteRecordsCountPipe } from './../../../../../../../pd-pipes/delete-records-count.pipe';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-manage-daily-sales',
|
||||||
|
templateUrl: './manage-daily-sales.component.html',
|
||||||
|
styleUrls: ['./manage-daily-sales.component.scss'],
|
||||||
|
providers: [DeleteRecordsCountPipe],
|
||||||
|
})
|
||||||
|
export class ManageDailySalesComponent implements OnInit {
|
||||||
|
pipe = new DatePipe('en-US');
|
||||||
|
pageTitle:string;
|
||||||
|
salesItemForm:FormGroup;
|
||||||
|
UOMData: any[]=[];
|
||||||
|
frequencyData: any[]=[];
|
||||||
|
private notifier: NotifierService;
|
||||||
|
constructor(notifier: NotifierService,private _fb: FormBuilder, private _pd: PdTrigerService, @Inject(MAT_DIALOG_DATA) public data: any, private dialogRef: MatDialogRef<ManageDailySalesComponent>) {
|
||||||
|
this.pageTitle = this.data.manage_status==1 ? 'Add Daily Sales Item' : 'Update Daily Sales Item';
|
||||||
|
this.notifier = notifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
if(this.data.manage_status==1){
|
||||||
|
this.salesItemForm = this._fb.group({
|
||||||
|
sales_product: this._fb.array([this.createSalesItem()]),
|
||||||
|
});
|
||||||
|
let control: any = <FormArray>this.salesItemForm.controls['sales_product'];
|
||||||
|
control = control.controls[0].get('child') as FormArray;
|
||||||
|
control.push(this.createDailySalesData(''))
|
||||||
|
}
|
||||||
|
else if(this.data.manage_status==2){
|
||||||
|
this.salesItemForm = this._fb.group({
|
||||||
|
sales_product: this._fb.array([this.createSalesItemWithData(this.data.editData)]),
|
||||||
|
});
|
||||||
|
let control: any = <FormArray>this.salesItemForm.controls['sales_product'];
|
||||||
|
control = control.controls[0].get('child') as FormArray;
|
||||||
|
this.data.editData.values.forEach(elementVal => {
|
||||||
|
control.push(this.createDailySalesWithData(elementVal,this.data.editData.sim_id))
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
this.salesItemForm = this._fb.group({
|
||||||
|
sales_product: this._fb.array([]),
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// add sales item details
|
||||||
|
createSalesItem():FormGroup {
|
||||||
|
return this._fb.group({
|
||||||
|
fk_pd_id: [this.data.masterData.pdid],
|
||||||
|
sim_id: [''],
|
||||||
|
sales_item: ['', Validators.compose([Validators.required])],
|
||||||
|
child: this._fb.array([]),
|
||||||
|
margin_per: [''],
|
||||||
|
margin_value: [''],
|
||||||
|
isactive:[true]
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// create daily list empty
|
||||||
|
createDailySalesData(sim_id: string) {
|
||||||
|
return this._fb.group({
|
||||||
|
simc_id: [''],
|
||||||
|
fk_sim_id: [sim_id],
|
||||||
|
sales_date: [''],
|
||||||
|
sales_value: ['', Validators.compose([Validators.required])],
|
||||||
|
isactive:[true]
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// create form with data
|
||||||
|
createSalesItemWithData(values: any) {
|
||||||
|
return this._fb.group({
|
||||||
|
fk_pd_id: [this.data.masterData.pdid],
|
||||||
|
sim_id: [values.sim_id],
|
||||||
|
sales_item: [values.salesItem, Validators.compose([Validators.required])],
|
||||||
|
child: this._fb.array([]),
|
||||||
|
margin_per: [this.data.margin_calculation_status===true ? values.margin_per: ''],
|
||||||
|
margin_value: [this.data.margin_calculation_status===true ? values.margin_value: ''],
|
||||||
|
isactive:[true]
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// create daily list
|
||||||
|
createDailySalesWithData(values: any, sim_id: string) {
|
||||||
|
return this._fb.group({
|
||||||
|
simc_id: [values.simc_id],
|
||||||
|
fk_sim_id: [sim_id],
|
||||||
|
sales_date: [new Date(this.pipe.transform(values.sales_date, 'yyyy-MM-dd')), Validators.compose([Validators.required])],
|
||||||
|
sales_value: [values.sales_value, Validators.compose([Validators.required])],
|
||||||
|
isactive:[true]
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// add more item
|
||||||
|
addMore(parentIndex: number): void{
|
||||||
|
let control = <FormArray>this.salesItemForm.controls['sales_product'];
|
||||||
|
control.push(this.createSalesItem());
|
||||||
|
control = control.controls[parentIndex].get('child') as FormArray;
|
||||||
|
control.push(this.createDailySalesData(''))
|
||||||
|
}
|
||||||
|
|
||||||
|
// add more daily items
|
||||||
|
addMoreDailySales(parentIndex: number,values: any): void{
|
||||||
|
let control: any = <FormArray>this.salesItemForm.controls['sales_product'];
|
||||||
|
control=control.controls[parentIndex].get('child') as FormArray;
|
||||||
|
control.push(this.createDailySalesData(values.sim_id));
|
||||||
|
}
|
||||||
|
|
||||||
|
// remove daily items
|
||||||
|
removeDailyItems(parentIndex: number,childIndex:number, childValue:any): void {
|
||||||
|
let control: any = <FormArray>this.salesItemForm.controls['sales_product'];
|
||||||
|
control=control.controls[parentIndex].get('child') as FormArray;
|
||||||
|
if(childValue.simc_id=='' || childValue.simc_id==null){
|
||||||
|
control.removeAt(childIndex);
|
||||||
|
let calculatControlValues: any = <FormArray>this.salesItemForm.controls['sales_product'];
|
||||||
|
calculatControlValues = calculatControlValues.controls[parentIndex];
|
||||||
|
this.salesCalculation(parentIndex,calculatControlValues.value);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
control.controls[childIndex].controls.isactive.setValue(false);
|
||||||
|
let calculatControlValues: any = <FormArray>this.salesItemForm.controls['sales_product'];
|
||||||
|
calculatControlValues = calculatControlValues.controls[parentIndex];
|
||||||
|
this.salesCalculation(parentIndex,calculatControlValues.value);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
removeProducts(parentIndex:number){
|
||||||
|
let control: any = <FormArray>this.salesItemForm.controls['sales_product'];
|
||||||
|
control.removeAt(parentIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
// close dialogue manually
|
||||||
|
closeDialogue(){
|
||||||
|
this.dialogRef.close({update_status:false});
|
||||||
|
}
|
||||||
|
|
||||||
|
salesCalculation(indexVal: number,values: any): void {
|
||||||
|
if(this.data.margin_calculation_status===true){
|
||||||
|
let control:any = <FormArray>this.salesItemForm.controls['sales_product'];
|
||||||
|
if(values.child.length>0 && values.margin_per!=''){
|
||||||
|
let transformData = values.child.filter(val=>val.sales_date!='' && val.sales_date!=null && val.sales_date!=undefined && val.sales_value!='' && val.isactive===true).map(mval=>{
|
||||||
|
mval.custum_date = this.pipe.transform(mval.sales_date, 'yyyy-MM');
|
||||||
|
return mval;
|
||||||
|
});
|
||||||
|
if(transformData.length>0) {
|
||||||
|
let getUniqueMonthCounts = transformData.map(val=>val.custum_date)
|
||||||
|
.filter((fVal,fIndex,fArray)=>{
|
||||||
|
return fIndex === fArray.indexOf(fVal);
|
||||||
|
});
|
||||||
|
let getTotalValueCounts = transformData.map(val=>val.sales_value)
|
||||||
|
.reduce((sum, curr) => parseInt(sum) + parseInt(curr));
|
||||||
|
control.controls[indexVal].controls['margin_value'].setValue(parseInt(getTotalValueCounts) * (parseInt(values.margin_per)/100) * (12 / parseInt(getUniqueMonthCounts.length)));
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
control.controls[indexVal].controls['margin_value'].setValue('');
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
control.controls[indexVal].controls['margin_value'].setValue('');
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
// save sales details
|
||||||
|
submitDetails(records) {
|
||||||
|
if (this.salesItemForm.invalid) {
|
||||||
|
this.validateAllFormFields(this.salesItemForm);
|
||||||
|
this.notifier.notify('warning',"Please Check All Manatory Fields..");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// this is for remove custom date key from my array values
|
||||||
|
records.sales_product.forEach(parVal => {
|
||||||
|
parVal.child.forEach(childVal => {
|
||||||
|
if(childVal['custum_date']){
|
||||||
|
delete childVal['custum_date'] ;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
this._pd.saveAssessedDetails('saveAssessedIncomeMonthwiseItems',records.sales_product).subscribe(data => {
|
||||||
|
this.notifier.notify('success', this.data.manage_status==2 ? 'Updated Successfully.' : 'Saved Successfully.');
|
||||||
|
setTimeout(() =>{
|
||||||
|
this.dialogRef.close({update_status:true});
|
||||||
|
},3000);
|
||||||
|
}, error => {
|
||||||
|
this.notifier.notify('warning', 'Something Wents Wrong Try Again.!');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// validate all form group and form array fields
|
||||||
|
validateAllFormFields(formGroup: any) {
|
||||||
|
Object.keys(formGroup.controls).forEach(field => {
|
||||||
|
const control = formGroup.get(field);
|
||||||
|
if (control instanceof FormControl) {
|
||||||
|
control.markAsTouched({ onlySelf: true });
|
||||||
|
} else if (control instanceof FormGroup) {
|
||||||
|
this.validateAllFormFields(control);
|
||||||
|
} else if (control instanceof FormArray) {
|
||||||
|
this.validateAllFormFields(control);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,53 @@
|
|||||||
|
<form [formGroup]="houseItemForm" novalidate>
|
||||||
|
|
||||||
|
<h2 mat-dialog-title class="paragraph_change">
|
||||||
|
<div fxFlex="70" align="left" style="padding: 10px !important;">
|
||||||
|
{{pageTitle}}
|
||||||
|
</div>
|
||||||
|
<div fxFlex="30" align="end" style="padding: 10px !important;">
|
||||||
|
<button mat-raised-button mat-icon-button class="mr-1 mb-1 hover-icon" type="button" matTooltip="Close" matTooltipPosition="above" (click)="closeDialogue()"><mat-icon>close</mat-icon></button>
|
||||||
|
</div>
|
||||||
|
</h2>
|
||||||
|
<mat-dialog-content>
|
||||||
|
<mat-card>
|
||||||
|
<mat-card-content formArrayName="houseExpense">
|
||||||
|
<div fxLayout="row wrap" *ngFor="let item of houseItemForm.controls.houseExpense['controls']; let s = index;" [formGroupName]="s">
|
||||||
|
<div fxFlex="100">
|
||||||
|
<mat-form-field style="width: 87%">
|
||||||
|
<input type="text" matInput placeholder="Expense Particulars" formControlName="expense_item" required>
|
||||||
|
</mat-form-field>
|
||||||
|
<button type="button" class="mr-1 mb-1 hover-icon" mat-raised-button mat-icon-button (click)="removeItem(s)" *ngIf="s>0"
|
||||||
|
matTooltip="Remove House Hold Item" matTooltipPosition="above">
|
||||||
|
<mat-icon>delete</mat-icon>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="item-margin" fxFlex="100">
|
||||||
|
<mat-form-field style="width: 25%">
|
||||||
|
<input OnlyNumber type="text" matInput placeholder="Amount (Rs)" (keyup)="houseCalculation(s,item.value)" formControlName="expense_value" required>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width: 25%">
|
||||||
|
<mat-select placeholder="Frequency" formControlName="fk_frequency_id" (selectionChange)="houseCalculation(s,item.value)" required>
|
||||||
|
<mat-option *ngFor="let frq of frequencyData" [value]="frq.frequency_id">{{frq.name}}</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width: 25%">
|
||||||
|
<input matInput OnlyNumber type="text" placeholder="Annual Expenses" formControlName="annual_expense_value" readonly>
|
||||||
|
</mat-form-field>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div fxLayout="row" *ngIf="data.manage_status==1">
|
||||||
|
<div fxFlex="100" align="center">
|
||||||
|
<button type="button" mat-flat-button (click)="addMore()"
|
||||||
|
matTooltip="Add More" matTooltipPosition="above" color="primary">
|
||||||
|
<strong>Add More House Hold Item</strong>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</mat-card-content>
|
||||||
|
</mat-card>
|
||||||
|
<notifier-container></notifier-container>
|
||||||
|
</mat-dialog-content>
|
||||||
|
<mat-dialog-actions align="end">
|
||||||
|
<button mat-raised-button mat-icon-button class="mr-1 mb-1 hover-icon" type="button" matTooltip="Save" matTooltipPosition="above" (click)="submitDetails(houseItemForm.value)"><mat-icon>save</mat-icon></button>
|
||||||
|
</mat-dialog-actions>
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
.paragraph_change {
|
||||||
|
color: #fff !important;
|
||||||
|
background-color: #e00201 !important;
|
||||||
|
}
|
||||||
|
mat-form-field {
|
||||||
|
margin: 0 2%;
|
||||||
|
}
|
||||||
|
.example-section {
|
||||||
|
height: 120px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.example-margin {
|
||||||
|
margin: 0 10px;
|
||||||
|
}
|
||||||
|
::ng-deep .cdk-global-overlay-wrapper{
|
||||||
|
justify-content: center !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-margin {
|
||||||
|
margin-left: 2%;
|
||||||
|
}
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { ManageHouseHoldComponent } from './manage-house-hold.component';
|
||||||
|
|
||||||
|
describe('ManageHouseHoldComponent', () => {
|
||||||
|
let component: ManageHouseHoldComponent;
|
||||||
|
let fixture: ComponentFixture<ManageHouseHoldComponent>;
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
declarations: [ ManageHouseHoldComponent ]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
fixture = TestBed.createComponent(ManageHouseHoldComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
@ -0,0 +1,122 @@
|
|||||||
|
import { Component, OnInit, Input, Output, Inject } from '@angular/core';
|
||||||
|
import { FormBuilder, FormGroup, Validators, FormControl, FormArray } from '@angular/forms';
|
||||||
|
import { MatDialog, MatDialogRef, MAT_DIALOG_DATA , DialogPosition} from '@angular/material';
|
||||||
|
import { PdTrigerService } from './../../../../../../../pd-service/pd-triger.service';
|
||||||
|
import { NotifierService } from 'angular-notifier';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-manage-house-hold',
|
||||||
|
templateUrl: './manage-house-hold.component.html',
|
||||||
|
styleUrls: ['./manage-house-hold.component.scss']
|
||||||
|
})
|
||||||
|
export class ManageHouseHoldComponent implements OnInit {
|
||||||
|
pageTitle:string;
|
||||||
|
houseItemForm:FormGroup;
|
||||||
|
frequencyData: any[]=[];
|
||||||
|
private notifier: NotifierService;
|
||||||
|
constructor(notifier: NotifierService,private _fb: FormBuilder, private _pd: PdTrigerService, @Inject(MAT_DIALOG_DATA) public data: any, private dialogRef: MatDialogRef<ManageHouseHoldComponent>) {
|
||||||
|
this.frequencyData=this.data.masterData.frequencyList;
|
||||||
|
this.pageTitle = this.data.manage_status==1 ? 'Add House Hold Item' : 'Update House Hold Item';
|
||||||
|
this.notifier = notifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
if(this.data.manage_status==2){
|
||||||
|
this.houseItemForm = this._fb.group({
|
||||||
|
houseExpense: this._fb.array([this.createHouseholdItemWithData(this.data.editData)]),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
this.houseItemForm = this._fb.group({
|
||||||
|
houseExpense: this._fb.array([this.createHouseholdItem()]),
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// add Household item details
|
||||||
|
createHouseholdItem():FormGroup {
|
||||||
|
return this._fb.group({
|
||||||
|
household_expense_id:[''],
|
||||||
|
fk_pd_id:[this.data.masterData.pdid] ,
|
||||||
|
expense_item: ['',Validators.compose([Validators.required])],
|
||||||
|
expense_value: ['',Validators.compose([Validators.required])],
|
||||||
|
fk_frequency_id: ['',Validators.compose([Validators.required])],
|
||||||
|
annual_expense_value: ['',Validators.compose([Validators.required])],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// create form with data
|
||||||
|
createHouseholdItemWithData(values: any) {
|
||||||
|
return this._fb.group({
|
||||||
|
household_expense_id:[values.household_expense_id],
|
||||||
|
fk_pd_id:[this.data.masterData.pdid] ,
|
||||||
|
expense_item: [values.expense_item,Validators.compose([Validators.required])],
|
||||||
|
expense_value: [values.expense_value,Validators.compose([Validators.required])],
|
||||||
|
fk_frequency_id: [values.fk_frequency_id,Validators.compose([Validators.required])],
|
||||||
|
annual_expense_value: [values.annual_expense_value,Validators.compose([Validators.required])],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// add more item
|
||||||
|
addMore(): void{
|
||||||
|
let control = <FormArray>this.houseItemForm.controls['houseExpense'];
|
||||||
|
control.push(this.createHouseholdItem());
|
||||||
|
}
|
||||||
|
|
||||||
|
// close dialogue manually
|
||||||
|
closeDialogue(){
|
||||||
|
this.dialogRef.close({update_status:false});
|
||||||
|
}
|
||||||
|
|
||||||
|
houseCalculation(indexVal: number,values: any): void {
|
||||||
|
let control:any = <FormArray>this.houseItemForm.controls['houseExpense'];
|
||||||
|
if(values.expense_value!='' && values.fk_frequency_id!='') {
|
||||||
|
let filterFrequencyValue: any = this.frequencyData.filter(val =>val.frequency_id==values.fk_frequency_id);
|
||||||
|
control.controls[indexVal].controls['annual_expense_value'].setValue(parseInt(values.expense_value) * parseInt(filterFrequencyValue[0].mutiple_factor));
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
control.controls[indexVal].controls['annual_expense_value'].setValue('');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
removeItem(indexVal: number) : void {
|
||||||
|
let control = <FormArray>this.houseItemForm.controls['houseExpense'];
|
||||||
|
control.removeAt(indexVal);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// save house hold details
|
||||||
|
submitDetails(records) {
|
||||||
|
if (this.houseItemForm.invalid) {
|
||||||
|
this.validateAllFormFields(this.houseItemForm);
|
||||||
|
this.notifier.notify('warning',"Please Check All Manatory Fields..");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this._pd.saveAssessedDetails('saveAssessedIncomeHouseholdExpenses',records.houseExpense).subscribe(data => {
|
||||||
|
this.notifier.notify('success', this.data.manage_status==2 ? 'Updated Successfully.' : 'Saved Successfully.');
|
||||||
|
setTimeout(() =>{
|
||||||
|
this.dialogRef.close({update_status:true});
|
||||||
|
},3000);
|
||||||
|
}, error => {
|
||||||
|
this.notifier.notify('warning', 'Something Wents Wrong Try Again.!');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// validate all form group and form array fields
|
||||||
|
validateAllFormFields(formGroup: any) {
|
||||||
|
Object.keys(formGroup.controls).forEach(field => {
|
||||||
|
const control = formGroup.get(field);
|
||||||
|
if (control instanceof FormControl) {
|
||||||
|
control.markAsTouched({ onlySelf: true });
|
||||||
|
} else if (control instanceof FormGroup) {
|
||||||
|
this.validateAllFormFields(control);
|
||||||
|
} else if (control instanceof FormArray) {
|
||||||
|
this.validateAllFormFields(control);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,55 @@
|
|||||||
|
<form [formGroup]="businessIncomeItemForm" novalidate>
|
||||||
|
|
||||||
|
<h2 mat-dialog-title class="paragraph_change">
|
||||||
|
<div fxFlex="70" align="left" style="padding: 10px !important;">
|
||||||
|
{{pageTitle}}
|
||||||
|
</div>
|
||||||
|
<div fxFlex="30" align="end" style="padding: 10px !important;">
|
||||||
|
<button mat-raised-button mat-icon-button class="mr-1 mb-1 hover-icon" type="button" matTooltip="Close" matTooltipPosition="above" (click)="closeDialogue()"><mat-icon>close</mat-icon></button>
|
||||||
|
</div>
|
||||||
|
</h2>
|
||||||
|
<mat-dialog-content>
|
||||||
|
<mat-card>
|
||||||
|
<mat-card-content formArrayName="busIncome">
|
||||||
|
<div fxLayout="row wrap" *ngFor="let item of businessIncomeItemForm.controls.busIncome['controls']; let s = index;" [formGroupName]="s">
|
||||||
|
<div fxFlex="100">
|
||||||
|
<mat-form-field style="width: 87%">
|
||||||
|
<mat-select placeholder="Buiness Income" formControlName="business_income_id" required>
|
||||||
|
<mat-option *ngFor="let income of businessIncomeData" [value]="income.business_income_id">{{income.business_income_item}}</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
<button type="button" class="mr-1 mb-1 hover-icon" mat-raised-button mat-icon-button (click)="removeItem(s)" *ngIf="s>0"
|
||||||
|
matTooltip="Remove Business Income Item" matTooltipPosition="above">
|
||||||
|
<mat-icon>delete</mat-icon>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="item-margin" fxFlex="100">
|
||||||
|
<mat-form-field style="width: 25%">
|
||||||
|
<input OnlyNumber type="text" matInput placeholder="Amount (Rs)" (keyup)="businessCalculation(s,item.value)" formControlName="income_value" required>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width: 25%">
|
||||||
|
<mat-select placeholder="Frequency" formControlName="fk_frequency_id" (selectionChange)="businessCalculation(s,item.value)" required>
|
||||||
|
<mat-option *ngFor="let frq of frequencyData" [value]="frq.frequency_id">{{frq.name}}</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width: 25%">
|
||||||
|
<input matInput OnlyNumber type="text" placeholder="Annual Income" formControlName="annual_income_value" readonly>
|
||||||
|
</mat-form-field>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div fxLayout="row" *ngIf="data.manage_status==1">
|
||||||
|
<div fxFlex="100" align="center">
|
||||||
|
<button type="button" mat-flat-button (click)="addMore()"
|
||||||
|
matTooltip="Add More" matTooltipPosition="above" color="primary">
|
||||||
|
<strong>Add More Business Income Item</strong>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</mat-card-content>
|
||||||
|
</mat-card>
|
||||||
|
<notifier-container></notifier-container>
|
||||||
|
</mat-dialog-content>
|
||||||
|
<mat-dialog-actions align="end">
|
||||||
|
<button mat-raised-button mat-icon-button class="mr-1 mb-1 hover-icon" type="button" matTooltip="Save" matTooltipPosition="above" (click)="submitDetails(businessIncomeItemForm.value)"><mat-icon>save</mat-icon></button>
|
||||||
|
</mat-dialog-actions>
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
.paragraph_change {
|
||||||
|
color: #fff !important;
|
||||||
|
background-color: #e00201 !important;
|
||||||
|
}
|
||||||
|
mat-form-field {
|
||||||
|
margin: 0 2%;
|
||||||
|
}
|
||||||
|
.example-section {
|
||||||
|
height: 120px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.example-margin {
|
||||||
|
margin: 0 10px;
|
||||||
|
}
|
||||||
|
::ng-deep .cdk-global-overlay-wrapper{
|
||||||
|
justify-content: center !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-margin {
|
||||||
|
margin-left: 2%;
|
||||||
|
}
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { ManageOtherBusinessIncomeComponent } from './manage-other-business-income.component';
|
||||||
|
|
||||||
|
describe('ManageOtherBusinessIncomeComponent', () => {
|
||||||
|
let component: ManageOtherBusinessIncomeComponent;
|
||||||
|
let fixture: ComponentFixture<ManageOtherBusinessIncomeComponent>;
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
declarations: [ ManageOtherBusinessIncomeComponent ]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
fixture = TestBed.createComponent(ManageOtherBusinessIncomeComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
@ -0,0 +1,125 @@
|
|||||||
|
import { Component, OnInit, Input, Output, Inject } from '@angular/core';
|
||||||
|
import { FormBuilder, FormGroup, Validators, FormControl, FormArray } from '@angular/forms';
|
||||||
|
import { MatDialog, MatDialogRef, MAT_DIALOG_DATA , DialogPosition} from '@angular/material';
|
||||||
|
import { PdTrigerService } from './../../../../../../../pd-service/pd-triger.service';
|
||||||
|
import { NotifierService } from 'angular-notifier';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-manage-other-business-income',
|
||||||
|
templateUrl: './manage-other-business-income.component.html',
|
||||||
|
styleUrls: ['./manage-other-business-income.component.scss']
|
||||||
|
})
|
||||||
|
export class ManageOtherBusinessIncomeComponent implements OnInit {
|
||||||
|
|
||||||
|
pageTitle:string;
|
||||||
|
businessIncomeItemForm:FormGroup;
|
||||||
|
frequencyData: any[]=[];
|
||||||
|
businessIncomeData: any[]=[];
|
||||||
|
private notifier: NotifierService;
|
||||||
|
constructor(notifier: NotifierService,private _fb: FormBuilder, private _pd: PdTrigerService, @Inject(MAT_DIALOG_DATA) public data: any, private dialogRef: MatDialogRef<ManageOtherBusinessIncomeComponent>) {
|
||||||
|
this.frequencyData=this.data.masterData.frequencyList;
|
||||||
|
this.businessIncomeData = this.data.masterData.businessIncomeList;
|
||||||
|
this.pageTitle = this.data.manage_status==1 ? 'Add Business Income Item' : 'Update Business Income Item';
|
||||||
|
this.notifier = notifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
if(this.data.manage_status==2){
|
||||||
|
this.businessIncomeItemForm = this._fb.group({
|
||||||
|
busIncome: this._fb.array([this.createBusinessIncomeItemWithData(this.data.editData)]),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
this.businessIncomeItemForm = this._fb.group({
|
||||||
|
busIncome: this._fb.array([this.createBusinessIncomeItem()]),
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// add business Income item details
|
||||||
|
createBusinessIncomeItem():FormGroup {
|
||||||
|
return this._fb.group({
|
||||||
|
pd_business_income_id:[''],
|
||||||
|
fk_pd_id:[this.data.masterData.pdid],
|
||||||
|
business_income_id:['',Validators.compose([Validators.required])],
|
||||||
|
income_value:['',Validators.compose([Validators.required])],
|
||||||
|
fk_frequency_id:['',Validators.compose([Validators.required])],
|
||||||
|
annual_income_value:['',Validators.compose([Validators.required])],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// create form with data
|
||||||
|
createBusinessIncomeItemWithData(values: any) {
|
||||||
|
return this._fb.group({
|
||||||
|
pd_business_income_id:[values.pd_business_income_id],
|
||||||
|
fk_pd_id:[this.data.masterData.pdid],
|
||||||
|
business_income_id:[values.business_income_id,Validators.compose([Validators.required])],
|
||||||
|
income_value:[values.income_value,Validators.compose([Validators.required])],
|
||||||
|
fk_frequency_id:[values.fk_frequency_id,Validators.compose([Validators.required])],
|
||||||
|
annual_income_value:[values.annual_income_value,Validators.compose([Validators.required])],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// add more item
|
||||||
|
addMore(): void{
|
||||||
|
let control = <FormArray>this.businessIncomeItemForm.controls['busIncome'];
|
||||||
|
control.push(this.createBusinessIncomeItem());
|
||||||
|
}
|
||||||
|
|
||||||
|
// close dialogue manually
|
||||||
|
closeDialogue(){
|
||||||
|
this.dialogRef.close({update_status:false});
|
||||||
|
}
|
||||||
|
|
||||||
|
businessCalculation(indexVal: number,values: any): void {
|
||||||
|
let control:any = <FormArray>this.businessIncomeItemForm.controls['busIncome'];
|
||||||
|
if(values.income_value!='' && values.fk_frequency_id!='') {
|
||||||
|
let filterFrequencyValue: any = this.frequencyData.filter(val =>val.frequency_id==values.fk_frequency_id);
|
||||||
|
control.controls[indexVal].controls['annual_income_value'].setValue(parseInt(values.income_value) * parseInt(filterFrequencyValue[0].mutiple_factor));
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
control.controls[indexVal].controls['annual_income_value'].setValue('');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
removeItem(indexVal: number) : void {
|
||||||
|
let control = <FormArray>this.businessIncomeItemForm.controls['busIncome'];
|
||||||
|
control.removeAt(indexVal);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// save purchase details
|
||||||
|
submitDetails(records) {
|
||||||
|
if (this.businessIncomeItemForm.invalid) {
|
||||||
|
this.validateAllFormFields(this.businessIncomeItemForm);
|
||||||
|
this.notifier.notify('warning',"Please Check All Manatory Fields..");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this._pd.saveAssessedDetails('saveOtherBusinessIncome',records.busIncome).subscribe(data => {
|
||||||
|
this.notifier.notify('success', this.data.manage_status==2 ? 'Updated Successfully.' : 'Saved Successfully.');
|
||||||
|
setTimeout(() =>{
|
||||||
|
this.dialogRef.close({update_status:true});
|
||||||
|
},3000);
|
||||||
|
}, error => {
|
||||||
|
this.notifier.notify('warning', 'Something Wents Wrong Try Again.!');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// validate all form group and form array fields
|
||||||
|
validateAllFormFields(formGroup: any) {
|
||||||
|
Object.keys(formGroup.controls).forEach(field => {
|
||||||
|
const control = formGroup.get(field);
|
||||||
|
if (control instanceof FormControl) {
|
||||||
|
control.markAsTouched({ onlySelf: true });
|
||||||
|
} else if (control instanceof FormGroup) {
|
||||||
|
this.validateAllFormFields(control);
|
||||||
|
} else if (control instanceof FormArray) {
|
||||||
|
this.validateAllFormFields(control);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,68 @@
|
|||||||
|
<form [formGroup]="purchaseItemForm" novalidate>
|
||||||
|
|
||||||
|
<h2 mat-dialog-title class="paragraph_change">
|
||||||
|
<div fxFlex="70" align="left" style="padding: 10px !important;">
|
||||||
|
{{pageTitle}}
|
||||||
|
</div>
|
||||||
|
<div fxFlex="30" align="end" style="padding: 10px !important;">
|
||||||
|
<button mat-raised-button mat-icon-button class="mr-1 mb-1 hover-icon" type="button" matTooltip="Close" matTooltipPosition="above" (click)="closeDialogue()"><mat-icon>close</mat-icon></button>
|
||||||
|
</div>
|
||||||
|
</h2>
|
||||||
|
<mat-dialog-content>
|
||||||
|
<mat-card>
|
||||||
|
<mat-card-content formArrayName="purchase">
|
||||||
|
<div fxLayout="row wrap" *ngFor="let item of purchaseItemForm.controls.purchase['controls']; let s = index;" [formGroupName]="s">
|
||||||
|
<div fxFlex="100">
|
||||||
|
<mat-form-field style="width: 87%">
|
||||||
|
<input type="text" matInput placeholder="Raw Material/Trading Item" formControlName="purchase_item" required>
|
||||||
|
</mat-form-field>
|
||||||
|
<button type="button" class="mr-1 mb-1 hover-icon" mat-raised-button mat-icon-button (click)="removeItem(s)" *ngIf="s>0"
|
||||||
|
matTooltip="Remove Purchase Item" matTooltipPosition="above">
|
||||||
|
<mat-icon>delete</mat-icon>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="item-margin" fxFlex="100">
|
||||||
|
<mat-form-field style="width: 25%">
|
||||||
|
<input OnlyNumber type="text" matInput placeholder="Purchase Quantity" (keyup)="purchaseCalculation(s,item.value)" formControlName="purchase_qty" required>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width: 25%">
|
||||||
|
<mat-select placeholder="UOM" formControlName="fk_uom_id" required>
|
||||||
|
<mat-option *ngFor="let uom of UOMData" [value]="uom.uom_id">{{uom.name}}</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width: 25%">
|
||||||
|
<input OnlyNumber type="text" matInput placeholder="Rate/Unit of Purchase" formControlName="rate_per_unit" (keyup)="purchaseCalculation(s,item.value)" required>
|
||||||
|
</mat-form-field>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="item-margin" fxFlex="100">
|
||||||
|
<mat-form-field style="width: 25%">
|
||||||
|
<mat-select placeholder="Frequency" formControlName="fk_frequency_id" (selectionChange)="purchaseCalculation(s,item.value)" required>
|
||||||
|
<mat-option *ngFor="let frq of frequencyData" [value]="frq.frequency_id">{{frq.name}}</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width: 25%">
|
||||||
|
<input matInput OnlyNumber type="text" placeholder="Annual Purchase" formControlName="annual_purchase_value" readonly>
|
||||||
|
</mat-form-field>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div fxLayout="row" *ngIf="data.manage_status==1">
|
||||||
|
<div fxFlex="100" align="center">
|
||||||
|
<button type="button" mat-flat-button (click)="addMore()"
|
||||||
|
matTooltip="Add More" matTooltipPosition="above" color="primary">
|
||||||
|
<strong>Add More Purchase Item</strong>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</mat-card-content>
|
||||||
|
</mat-card>
|
||||||
|
<notifier-container></notifier-container>
|
||||||
|
</mat-dialog-content>
|
||||||
|
<mat-dialog-actions align="end">
|
||||||
|
<button mat-raised-button mat-icon-button class="mr-1 mb-1 hover-icon" type="button" matTooltip="Save" matTooltipPosition="above" (click)="submitDetails(purchaseItemForm.value)"><mat-icon>save</mat-icon></button>
|
||||||
|
</mat-dialog-actions>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
.paragraph_change {
|
||||||
|
color: #fff !important;
|
||||||
|
background-color: #e00201 !important;
|
||||||
|
}
|
||||||
|
mat-form-field {
|
||||||
|
margin: 0 2%;
|
||||||
|
}
|
||||||
|
.example-section {
|
||||||
|
height: 120px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.example-margin {
|
||||||
|
margin: 0 10px;
|
||||||
|
}
|
||||||
|
::ng-deep .cdk-global-overlay-wrapper{
|
||||||
|
justify-content: center !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-margin {
|
||||||
|
margin-left: 2%;
|
||||||
|
}
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { ManagePurchaseComponent } from './manage-purchase.component';
|
||||||
|
|
||||||
|
describe('ManagePurchaseComponent', () => {
|
||||||
|
let component: ManagePurchaseComponent;
|
||||||
|
let fixture: ComponentFixture<ManagePurchaseComponent>;
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
declarations: [ ManagePurchaseComponent ]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
fixture = TestBed.createComponent(ManagePurchaseComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
@ -0,0 +1,129 @@
|
|||||||
|
import { Component, OnInit, Input, Output, Inject } from '@angular/core';
|
||||||
|
import { FormBuilder, FormGroup, Validators, FormControl, FormArray } from '@angular/forms';
|
||||||
|
import { MatDialog, MatDialogRef, MAT_DIALOG_DATA , DialogPosition} from '@angular/material';
|
||||||
|
import { PdTrigerService } from './../../../../../../../pd-service/pd-triger.service';
|
||||||
|
import { NotifierService } from 'angular-notifier';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-manage-purchase',
|
||||||
|
templateUrl: './manage-purchase.component.html',
|
||||||
|
styleUrls: ['./manage-purchase.component.scss']
|
||||||
|
})
|
||||||
|
export class ManagePurchaseComponent implements OnInit {
|
||||||
|
|
||||||
|
pageTitle:string;
|
||||||
|
purchaseItemForm:FormGroup;
|
||||||
|
UOMData: any[]=[];
|
||||||
|
frequencyData: any[]=[];
|
||||||
|
private notifier: NotifierService;
|
||||||
|
constructor(notifier: NotifierService,private _fb: FormBuilder, private _pd: PdTrigerService, @Inject(MAT_DIALOG_DATA) public data: any, private dialogRef: MatDialogRef<ManagePurchaseComponent>) {
|
||||||
|
this.UOMData=this.data.masterData.UOMList;
|
||||||
|
this.frequencyData=this.data.masterData.frequencyList;
|
||||||
|
this.pageTitle = this.data.manage_status==1 ? 'Add Purchase Item' : 'Update Purchase Item';
|
||||||
|
this.notifier = notifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
if(this.data.manage_status==2){
|
||||||
|
this.purchaseItemForm = this._fb.group({
|
||||||
|
purchase: this._fb.array([this.createPurchaseItemWithData(this.data.editData)]),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
this.purchaseItemForm = this._fb.group({
|
||||||
|
purchase: this._fb.array([this.createPurchaseItem()]),
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// add purchase item details
|
||||||
|
createPurchaseItem():FormGroup {
|
||||||
|
return this._fb.group({
|
||||||
|
purchase_id:[''],
|
||||||
|
fk_pd_id:[this.data.masterData.pdid],
|
||||||
|
purchase_item:['',Validators.compose([Validators.required])],
|
||||||
|
purchase_qty:['',Validators.compose([Validators.required])],
|
||||||
|
fk_uom_id:['',Validators.compose([Validators.required])],
|
||||||
|
rate_per_unit:['',Validators.compose([Validators.required])],
|
||||||
|
fk_frequency_id:['',Validators.compose([Validators.required])],
|
||||||
|
annual_purchase_value:['',Validators.compose([Validators.required])],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// create form with data
|
||||||
|
createPurchaseItemWithData(values: any) {
|
||||||
|
return this._fb.group({
|
||||||
|
purchase_id:[values.purchase_id],
|
||||||
|
fk_pd_id:[this.data.masterData.pdid],
|
||||||
|
purchase_item:[values.purchase_item,Validators.compose([Validators.required])],
|
||||||
|
purchase_qty:[values.purchase_qty,Validators.compose([Validators.required])],
|
||||||
|
fk_uom_id:[values.fk_uom_id,Validators.compose([Validators.required])],
|
||||||
|
rate_per_unit:[values.rate_per_unit,Validators.compose([Validators.required])],
|
||||||
|
fk_frequency_id:[values.fk_frequency_id,Validators.compose([Validators.required])],
|
||||||
|
annual_purchase_value:[values.annual_purchase_value,Validators.compose([Validators.required])],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// add more item
|
||||||
|
addMore(): void{
|
||||||
|
let control = <FormArray>this.purchaseItemForm.controls['purchase'];
|
||||||
|
control.push(this.createPurchaseItem());
|
||||||
|
}
|
||||||
|
|
||||||
|
// close dialogue manually
|
||||||
|
closeDialogue(){
|
||||||
|
this.dialogRef.close({update_status:false});
|
||||||
|
}
|
||||||
|
|
||||||
|
purchaseCalculation(indexVal: number,values: any): void {
|
||||||
|
let control:any = <FormArray>this.purchaseItemForm.controls['purchase'];
|
||||||
|
if(values.purchase_qty!='' && values.rate_per_unit!='' && values.fk_frequency_id!='') {
|
||||||
|
let filterFrequencyValue: any = this.frequencyData.filter(val =>val.frequency_id==values.fk_frequency_id);
|
||||||
|
control.controls[indexVal].controls['annual_purchase_value'].setValue(parseInt(values.purchase_qty) * parseInt(values.rate_per_unit) * parseInt(filterFrequencyValue[0].mutiple_factor));
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
control.controls[indexVal].controls['annual_purchase_value'].setValue('');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
removeItem(indexVal: number) : void {
|
||||||
|
let control = <FormArray>this.purchaseItemForm.controls['purchase'];
|
||||||
|
control.removeAt(indexVal);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// save purchase details
|
||||||
|
submitDetails(records) {
|
||||||
|
if (this.purchaseItemForm.invalid) {
|
||||||
|
this.validateAllFormFields(this.purchaseItemForm);
|
||||||
|
this.notifier.notify('warning',"Please Check All Manatory Fields..");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this._pd.saveAssessedDetails('saveAssessedIncomePurchaseDetails',records.purchase).subscribe(data => {
|
||||||
|
this.notifier.notify('success', this.data.manage_status==2 ? 'Updated Successfully.' : 'Saved Successfully.');
|
||||||
|
setTimeout(() =>{
|
||||||
|
this.dialogRef.close({update_status:true});
|
||||||
|
},3000);
|
||||||
|
}, error => {
|
||||||
|
this.notifier.notify('warning', 'Something Wents Wrong Try Again.!');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// validate all form group and form array fields
|
||||||
|
validateAllFormFields(formGroup: any) {
|
||||||
|
Object.keys(formGroup.controls).forEach(field => {
|
||||||
|
const control = formGroup.get(field);
|
||||||
|
if (control instanceof FormControl) {
|
||||||
|
control.markAsTouched({ onlySelf: true });
|
||||||
|
} else if (control instanceof FormGroup) {
|
||||||
|
this.validateAllFormFields(control);
|
||||||
|
} else if (control instanceof FormArray) {
|
||||||
|
this.validateAllFormFields(control);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,78 @@
|
|||||||
|
<form [formGroup]="salesItemForm" novalidate>
|
||||||
|
|
||||||
|
<h2 mat-dialog-title class="paragraph_change">
|
||||||
|
<div fxFlex="70" align="left" style="padding: 10px !important;">
|
||||||
|
{{pageTitle}}
|
||||||
|
</div>
|
||||||
|
<div fxFlex="30" align="end" style="padding: 10px !important;">
|
||||||
|
<button mat-raised-button mat-icon-button class="mr-1 mb-1 hover-icon" type="button" matTooltip="Close" matTooltipPosition="above" (click)="closeDialogue()"><mat-icon>close</mat-icon></button>
|
||||||
|
</div>
|
||||||
|
</h2>
|
||||||
|
<mat-dialog-content>
|
||||||
|
<mat-card>
|
||||||
|
<mat-card-content formArrayName="salesCalItemwise">
|
||||||
|
<div fxLayout="row wrap" *ngFor="let sales of salesItemForm.controls.salesCalItemwise['controls']; let s = index;" [formGroupName]="s">
|
||||||
|
<div fxFlex="100">
|
||||||
|
<mat-form-field style="width: 87%">
|
||||||
|
<input type="text" matInput placeholder="Product/Services" formControlName="sales_item" required>
|
||||||
|
</mat-form-field>
|
||||||
|
<button type="button" class="mr-1 mb-1 hover-icon" mat-raised-button mat-icon-button (click)="removeItem(s)" *ngIf="s>0"
|
||||||
|
matTooltip="Remove Sales Item" matTooltipPosition="above">
|
||||||
|
<mat-icon>delete</mat-icon>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="item-margin" fxFlex="100">
|
||||||
|
<mat-form-field style="width: 25%">
|
||||||
|
<input OnlyNumber type="text" matInput placeholder="Sale Quantity" (keyup)="salesCalculation(s,sales.value)" formControlName="sales_qty" required>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width: 25%">
|
||||||
|
<mat-select placeholder="UOM" formControlName="fk_uom_id" required>
|
||||||
|
<mat-option *ngFor="let uom of UOMData" [value]="uom.uom_id">{{uom.name}}</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width: 25%">
|
||||||
|
<input OnlyNumber type="text" matInput placeholder="Rate/Unit of Sale" formControlName="rate_per_unit" (keyup)="salesCalculation(s,sales.value)" required>
|
||||||
|
</mat-form-field>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="item-margin" fxFlex="100">
|
||||||
|
<mat-form-field style="width: 25%">
|
||||||
|
<mat-select placeholder="Frequency" formControlName="fk_frequency_id" (selectionChange)="salesCalculation(s,sales.value)" required>
|
||||||
|
<mat-option *ngFor="let frq of frequencyData" [value]="frq.frequency_id">{{frq.name}}</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width: 25%">
|
||||||
|
<input matInput OnlyNumber type="text" placeholder="Annual Sales" formControlName="annual_sale_value" readonly>
|
||||||
|
</mat-form-field>
|
||||||
|
</div>
|
||||||
|
<div class="item-margin" fxFlex="100" *ngIf="data.margin_calculation_status===true">
|
||||||
|
<mat-form-field style="width: 25%">
|
||||||
|
<input matInput OnlyNumber type="text" placeholder="Margin Percentage %" formControlName="margin_per" (keyup)="salesMarginPerCalculation(s,sales.value)">
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width: 25%">
|
||||||
|
<input matInput OnlyNumber type="text" placeholder="Margin Amount" formControlName="margin_per_uom" (keyup)="salesMarginAmtCalculation(s,sales.value)">
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width: 25%">
|
||||||
|
<input matInput OnlyNumber type="text" placeholder="Final Value" formControlName="margin_final_value" readonly>
|
||||||
|
</mat-form-field>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div fxLayout="row" *ngIf="data.manage_status==1">
|
||||||
|
<div fxFlex="100" align="center">
|
||||||
|
<button type="button" mat-flat-button (click)="addMore()"
|
||||||
|
matTooltip="Add More" matTooltipPosition="above" color="primary">
|
||||||
|
<strong>Add More Sales Item</strong>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</mat-card-content>
|
||||||
|
</mat-card>
|
||||||
|
<notifier-container></notifier-container>
|
||||||
|
</mat-dialog-content>
|
||||||
|
<mat-dialog-actions align="end">
|
||||||
|
<button mat-raised-button mat-icon-button class="mr-1 mb-1 hover-icon" type="button" matTooltip="Save" matTooltipPosition="above" (click)="submitDetails(salesItemForm.value)"><mat-icon>save</mat-icon></button>
|
||||||
|
</mat-dialog-actions>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
.paragraph_change {
|
||||||
|
color: #fff !important;
|
||||||
|
background-color: #e00201 !important;
|
||||||
|
}
|
||||||
|
mat-form-field {
|
||||||
|
margin: 0 2%;
|
||||||
|
}
|
||||||
|
.example-section {
|
||||||
|
height: 120px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.example-margin {
|
||||||
|
margin: 0 10px;
|
||||||
|
}
|
||||||
|
::ng-deep .cdk-global-overlay-wrapper{
|
||||||
|
justify-content: center !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-margin {
|
||||||
|
margin-left: 2%;
|
||||||
|
}
|
||||||
|
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { ManageSalesComponent } from './manage-sales.component';
|
||||||
|
|
||||||
|
describe('ManageSalesComponent', () => {
|
||||||
|
let component: ManageSalesComponent;
|
||||||
|
let fixture: ComponentFixture<ManageSalesComponent>;
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
declarations: [ ManageSalesComponent ]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
fixture = TestBed.createComponent(ManageSalesComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
@ -0,0 +1,157 @@
|
|||||||
|
import { Component, OnInit, Input, Output, Inject } from '@angular/core';
|
||||||
|
import { FormBuilder, FormGroup, Validators, FormControl, FormArray } from '@angular/forms';
|
||||||
|
import { MatDialog, MatDialogRef, MAT_DIALOG_DATA , DialogPosition} from '@angular/material';
|
||||||
|
import { PdTrigerService } from './../../../../../../../pd-service/pd-triger.service';
|
||||||
|
import { NotifierService } from 'angular-notifier';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-manage-sales',
|
||||||
|
templateUrl: './manage-sales.component.html',
|
||||||
|
styleUrls: ['./manage-sales.component.scss']
|
||||||
|
})
|
||||||
|
export class ManageSalesComponent implements OnInit {
|
||||||
|
pageTitle:string;
|
||||||
|
salesItemForm:FormGroup;
|
||||||
|
UOMData: any[]=[];
|
||||||
|
frequencyData: any[]=[];
|
||||||
|
private notifier: NotifierService;
|
||||||
|
constructor(notifier: NotifierService,private _fb: FormBuilder, private _pd: PdTrigerService, @Inject(MAT_DIALOG_DATA) public data: any, private dialogRef: MatDialogRef<ManageSalesComponent>) {
|
||||||
|
this.UOMData=this.data.masterData.UOMList;
|
||||||
|
this.frequencyData=this.data.masterData.frequencyList;
|
||||||
|
this.pageTitle = this.data.manage_status==1 ? 'Add Sales Item' : 'Update Sales Item';
|
||||||
|
this.notifier = notifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
if(this.data.manage_status==2){
|
||||||
|
this.salesItemForm = this._fb.group({
|
||||||
|
salesCalItemwise: this._fb.array([this.createSalesItemWithData(this.data.editData)]),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
this.salesItemForm = this._fb.group({
|
||||||
|
salesCalItemwise: this._fb.array([this.createSalesItem()]),
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// add sales item details
|
||||||
|
createSalesItem():FormGroup {
|
||||||
|
return this._fb.group({
|
||||||
|
sci_id:[],
|
||||||
|
fk_pd_id:[this.data.masterData.pdid],
|
||||||
|
sales_item:['',Validators.compose([Validators.required])],
|
||||||
|
sales_qty:['',Validators.compose([Validators.required])],
|
||||||
|
fk_uom_id:['',Validators.compose([Validators.required])],
|
||||||
|
rate_per_unit:['',Validators.compose([Validators.required])],
|
||||||
|
fk_frequency_id:['',Validators.compose([Validators.required])],
|
||||||
|
annual_sale_value:[''],
|
||||||
|
margin_per:[''],
|
||||||
|
margin_per_uom:[''],
|
||||||
|
margin_final_value:[''],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// create form with data
|
||||||
|
createSalesItemWithData(values: any) {
|
||||||
|
return this._fb.group({
|
||||||
|
sci_id:[values.sci_id],
|
||||||
|
fk_pd_id:[this.data.masterData.pdid],
|
||||||
|
sales_item:[values.sales_item,Validators.compose([Validators.required])],
|
||||||
|
sales_qty:[values.sales_qty,Validators.compose([Validators.required])],
|
||||||
|
fk_uom_id:[values.fk_uom_id,Validators.compose([Validators.required])],
|
||||||
|
rate_per_unit:[values.rate_per_unit,Validators.compose([Validators.required])],
|
||||||
|
fk_frequency_id:[values.fk_frequency_id,Validators.compose([Validators.required])],
|
||||||
|
annual_sale_value:[values.annual_sale_value],
|
||||||
|
margin_per:[this.data.margin_calculation_status===true ? values.margin_per : ''],
|
||||||
|
margin_per_uom:[this.data.margin_calculation_status===true ? values.margin_per_uom :''],
|
||||||
|
margin_final_value:[this.data.margin_calculation_status===true ? values.margin_final_value: ''],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// add more item
|
||||||
|
addMore(): void{
|
||||||
|
let control = <FormArray>this.salesItemForm.controls['salesCalItemwise'];
|
||||||
|
control.push(this.createSalesItem());
|
||||||
|
}
|
||||||
|
|
||||||
|
// close dialogue manually
|
||||||
|
closeDialogue(){
|
||||||
|
this.dialogRef.close({update_status:false});
|
||||||
|
}
|
||||||
|
|
||||||
|
salesCalculation(indexVal: number,values: any): void {
|
||||||
|
let control:any = <FormArray>this.salesItemForm.controls['salesCalItemwise'];
|
||||||
|
if(values.sales_qty!='' && values.rate_per_unit!='' && values.fk_frequency_id!='') {
|
||||||
|
let filterFrequencyValue: any = this.frequencyData.filter(val =>val.frequency_id==values.fk_frequency_id);
|
||||||
|
control.controls[indexVal].controls['annual_sale_value'].setValue(parseInt(values.sales_qty) * parseInt(values.rate_per_unit) * parseInt(filterFrequencyValue[0].mutiple_factor));
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
control.controls[indexVal].controls['annual_sale_value'].setValue('');
|
||||||
|
}
|
||||||
|
if(this.data.margin_calculation_status===true) {
|
||||||
|
values.margin_per_uom=='' && values.margin_per!='' ? this.salesMarginPerCalculation(indexVal,this.salesItemForm.value.salesCalItemwise[indexVal]): values.margin_per_uom!='' && values.margin_per=='' ? this.salesMarginAmtCalculation(indexVal,this.salesItemForm.value.salesCalItemwise[indexVal]) : values.margin_per_uom!='' && values.margin_per!='' ? this.salesMarginAmtCalculation(indexVal,this.salesItemForm.value.salesCalItemwise[indexVal]) :this.salesMarginAmtCalculation(indexVal,this.salesItemForm.value.salesCalItemwise[indexVal]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
salesMarginPerCalculation(indexVal: number,values: any): void {
|
||||||
|
let control:any = <FormArray>this.salesItemForm.controls['salesCalItemwise'];
|
||||||
|
control.controls[indexVal].controls['margin_per_uom'].setValue('');
|
||||||
|
if(values.margin_per!='' && values.annual_sale_value!='') {
|
||||||
|
control.controls[indexVal].controls['margin_final_value'].setValue(parseInt(values.annual_sale_value) * (parseInt(values.margin_per)/100));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
control.controls[indexVal].controls['margin_final_value'].setValue('');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
salesMarginAmtCalculation(indexVal: number,values: any): void {
|
||||||
|
let control:any = <FormArray>this.salesItemForm.controls['salesCalItemwise'];
|
||||||
|
control.controls[indexVal].controls['margin_per'].setValue('');
|
||||||
|
if(values.margin_per_uom!='' && values.sales_qty!='') {
|
||||||
|
control.controls[indexVal].controls['margin_final_value'].setValue(parseInt(values.sales_qty) * parseInt(values.margin_per_uom));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
control.controls[indexVal].controls['margin_final_value'].setValue('');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
removeItem(indexVal: number) : void {
|
||||||
|
let control = <FormArray>this.salesItemForm.controls['salesCalItemwise'];
|
||||||
|
control.removeAt(indexVal);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// save sales details
|
||||||
|
submitDetails(records) {
|
||||||
|
if (this.salesItemForm.invalid) {
|
||||||
|
this.validateAllFormFields(this.salesItemForm);
|
||||||
|
this.notifier.notify('warning',"Please Check All Manatory Fields..");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this._pd.saveAssessedDetails('saveAssessedIncomeSalesCalculatedByItemwise',records.salesCalItemwise).subscribe(data => {
|
||||||
|
this.notifier.notify('success', this.data.manage_status==2 ? 'Updated Successfully.' : 'Saved Successfully.');
|
||||||
|
setTimeout(() =>{
|
||||||
|
this.dialogRef.close({update_status:true});
|
||||||
|
},3000);
|
||||||
|
}, error => {
|
||||||
|
this.notifier.notify('warning', 'Something Wents Wrong Try Again.!');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// validate all form group and form array fields
|
||||||
|
validateAllFormFields(formGroup: any) {
|
||||||
|
Object.keys(formGroup.controls).forEach(field => {
|
||||||
|
const control = formGroup.get(field);
|
||||||
|
if (control instanceof FormControl) {
|
||||||
|
control.markAsTouched({ onlySelf: true });
|
||||||
|
} else if (control instanceof FormGroup) {
|
||||||
|
this.validateAllFormFields(control);
|
||||||
|
} else if (control instanceof FormArray) {
|
||||||
|
this.validateAllFormFields(control);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -1,6 +1,4 @@
|
|||||||
<form [formGroup]="_assessedIncomeFormFrom">
|
<h2 mat-dialog-title class="paragraph_change">
|
||||||
|
|
||||||
<h2 mat-dialog-title class="paragraph_change">
|
|
||||||
<div fxFlex="70" align="left" style="padding: 10px !important;">
|
<div fxFlex="70" align="left" style="padding: 10px !important;">
|
||||||
{{pageTitle}}
|
{{pageTitle}}
|
||||||
</div>
|
</div>
|
||||||
@ -13,269 +11,126 @@
|
|||||||
<mat-dialog-content>
|
<mat-dialog-content>
|
||||||
|
|
||||||
|
|
||||||
<mat-tab-group>
|
<!--start assessed income tabs control-->
|
||||||
<mat-tab label="Questions">
|
<mat-tab-group #matgroup>
|
||||||
|
<mat-tab label="Summary">
|
||||||
<ng-template matTabContent>
|
<ng-template matTabContent>
|
||||||
<div fxLayout="row wrap">
|
|
||||||
<div fxFlex="100">
|
|
||||||
|
|
||||||
<mat-card>
|
<mat-card>
|
||||||
<mat-card-content>
|
<mat-card-content>
|
||||||
<mat-form-field>
|
<mat-nav-list>
|
||||||
<input matInput placeholder="Sales Declared By Customer" formControlName="sales_declared_by_customer">
|
|
||||||
</mat-form-field>
|
|
||||||
<mat-accordion multi="false">
|
|
||||||
<mat-expansion-panel>
|
|
||||||
<mat-expansion-panel-header>
|
|
||||||
<mat-panel-title>
|
|
||||||
<small class="expan_table_header">Sales Calculate Item Wise</small>
|
|
||||||
</mat-panel-title>
|
|
||||||
<mat-panel-description class="subtitle_message">
|
|
||||||
{{salesCaluatedItem.length}} Items
|
|
||||||
</mat-panel-description>
|
|
||||||
</mat-expansion-panel-header>
|
|
||||||
<ng-template matExpansionPanelContent>
|
|
||||||
<div class="example-container mat-elevation-z8">
|
|
||||||
<table mat-table [dataSource]="salesCaluatedItem">
|
|
||||||
<!-- Item Column -->
|
|
||||||
<ng-container matColumnDef="Item">
|
|
||||||
<th mat-header-cell *matHeaderCellDef>Item</th>
|
|
||||||
<td mat-cell *matCellDef="let salesItem">{{salesItem.sales_item}} </td>
|
|
||||||
</ng-container>
|
|
||||||
<!-- Qty/Uom Column-->
|
|
||||||
<ng-container matColumnDef="Qty/UOM">
|
|
||||||
<th mat-header-cell *matHeaderCellDef>Qty/UOM</th>
|
|
||||||
<td mat-cell *matCellDef="let salesItem">{{salesItem.sales_qty }}/{{salesItem.uom_name }} </td>
|
|
||||||
</ng-container>
|
|
||||||
<!-- Rate/Unit Column-->
|
|
||||||
<ng-container matColumnDef="Rate/Unit">
|
|
||||||
<th mat-header-cell *matHeaderCellDef>Rate/Unit</th>
|
|
||||||
<td mat-cell *matCellDef="let salesItem"> {{salesItem.rate_per_unit }} </td>
|
|
||||||
</ng-container>
|
|
||||||
<!-- Frequency Name Column -->
|
|
||||||
|
|
||||||
<ng-container matColumnDef="Frequency">
|
<mat-list-item (click)='matgroup.selectedIndex = 1'>
|
||||||
<th mat-header-cell *matHeaderCellDef>Frequency</th>
|
<div fxFlex.xs="70" fxFlex.sm="70" fxFlex.md="50" fxFlex.lg="40" fxFlex.xl="40">
|
||||||
<td mat-cell *matCellDef="let salesItem"> {{salesItem.frequency_name}} </td>
|
<p matLine> a) Cost of Goods Sold </p>
|
||||||
</ng-container>
|
|
||||||
<!-- Annual Sale Value Column-->
|
|
||||||
<ng-container matColumnDef="Annual Sale Value">
|
|
||||||
<th mat-header-cell *matHeaderCellDef>Annual Sale Value</th>
|
|
||||||
<td mat-cell *matCellDef="let salesItem"> {{salesItem.annual_sale_value}} </td>
|
|
||||||
</ng-container>
|
|
||||||
|
|
||||||
<tr mat-header-row *matHeaderRowDef="salesCaluatedItemColumns; sticky: true"></tr>
|
|
||||||
<tr mat-row *matRowDef="let row; columns: salesCaluatedItemColumns;"></tr>
|
|
||||||
</table>
|
|
||||||
</div>
|
</div>
|
||||||
</ng-template>
|
<div fxFlex.xs="30" fxFlex.sm="30" fxFlex.md="20" fxFlex.lg="25" fxFlex.xl="25" class="mat_list_center_div">
|
||||||
</mat-expansion-panel>
|
<p matLine> {{sales_value}} </p>
|
||||||
<mat-expansion-panel>
|
|
||||||
<mat-expansion-panel-header>
|
|
||||||
<mat-panel-title>
|
|
||||||
<small class="expan_table_header">Sales Calculate Month Wise</small>
|
|
||||||
</mat-panel-title>
|
|
||||||
<mat-panel-description class="subtitle_message">
|
|
||||||
{{salesMonthWiseExpandedItems.length}} Items
|
|
||||||
</mat-panel-description>
|
|
||||||
</mat-expansion-panel-header>
|
|
||||||
<ng-template matExpansionPanelContent>
|
|
||||||
<!-- <mat-accordion multi="true">
|
|
||||||
<mat-expansion-panel *ngFor="let expandDetails of salesMonthWiseExpandedItems">
|
|
||||||
<mat-expansion-panel-header>
|
|
||||||
<mat-panel-title>
|
|
||||||
<small class="expan_table_header">{{expandDetails.salesItem}}</small>
|
|
||||||
</mat-panel-title>
|
|
||||||
</mat-expansion-panel-header>
|
|
||||||
<ng-template matExpansionPanelContent>
|
|
||||||
|
|
||||||
|
|
||||||
</ng-template>
|
|
||||||
|
|
||||||
<mat-action-row *ngFor="let footer of expandDetails.footerMessage">
|
|
||||||
<div fxFlex="50" >
|
|
||||||
<small class="expan_footer">{{footer.month_message}}</small>
|
|
||||||
</div>
|
|
||||||
<div fxFlex="50" >
|
|
||||||
<small class="expan_footer">{{footer.year_message}}</small>
|
|
||||||
</div>
|
|
||||||
</mat-action-row>
|
|
||||||
</mat-expansion-panel>
|
|
||||||
</mat-accordion> -->
|
|
||||||
<mat-card *ngFor="let expandDetails of salesMonthWiseExpandedItems">
|
|
||||||
<mat-card-header>
|
|
||||||
<mat-card-title><small class="expan_table_header">{{expandDetails.salesItem}}</small></mat-card-title>
|
|
||||||
<mat-card-subtitle class="subtitle_message" *ngFor="let footer of expandDetails.footerMessage">
|
|
||||||
<div fxFlex="100">
|
|
||||||
{{footer.month_message}} {{footer.year_message}}
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</mat-card-subtitle>
|
</mat-list-item>
|
||||||
</mat-card-header>
|
<mat-list-item (click)='matgroup.selectedIndex = 2'>
|
||||||
<mat-divider></mat-divider>
|
<div fxFlex.xs="70" fxFlex.sm="70" fxFlex.md="50" fxFlex.lg="40" fxFlex.xl="40">
|
||||||
<mat-card-content style="display: flex;margin-top: -20px;">
|
<p matLine> b) Purchases </p>
|
||||||
<!-- <div fxLayout="row wrap">
|
</div>
|
||||||
</div> -->
|
<div fxFlex.xs="30" fxFlex.sm="30" fxFlex.md="20" fxFlex.lg="25" fxFlex.xl="25" class="mat_list_center_div">
|
||||||
<div fxFlex="50" *ngFor="let eachItem of expandDetails.expandElements" class="m-gap p-gap">
|
<p matLine> {{purchase_value}} </p>
|
||||||
|
|
||||||
<h4 align="center" class="h4_font">{{eachItem.header}}</h4>
|
|
||||||
<table mat-table [dataSource]="eachItem.value" class="mat-elevation-z8">
|
|
||||||
<ng-container matColumnDef="Date">
|
|
||||||
<th mat-header-cell *matHeaderCellDef>Date</th>
|
|
||||||
<td mat-cell *matCellDef="let itemValue">{{itemValue.sales_date | date: 'dd-MM-yyyy'}} </td>
|
|
||||||
<td mat-footer-cell *matFooterCellDef> Total </td>
|
|
||||||
</ng-container>
|
|
||||||
<!-- Value Column-->
|
|
||||||
<ng-container matColumnDef="Amount">
|
|
||||||
<th mat-header-cell *matHeaderCellDef>Amount</th>
|
|
||||||
<td mat-cell *matCellDef="let itemValue">{{itemValue.sales_value}}</td>
|
|
||||||
<td mat-footer-cell *matFooterCellDef> {{getTotalCost(eachItem.value)}} </td>
|
|
||||||
</ng-container>
|
|
||||||
|
|
||||||
<tr mat-header-row *matHeaderRowDef="salesMonthItemColumns; sticky: true"></tr>
|
|
||||||
<tr mat-row *matRowDef="let row; columns: salesMonthItemColumns;"></tr>
|
|
||||||
<tr mat-footer-row *matFooterRowDef="salesMonthItemColumns; sticky: true"></tr>
|
|
||||||
</table>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</mat-card-content>
|
</mat-list-item>
|
||||||
|
<mat-list-item>
|
||||||
</mat-card>
|
<div fxFlex.xs="70" fxFlex.sm="70" fxFlex.md="50" fxFlex.lg="40" fxFlex.xl="40">
|
||||||
|
<p matLine> c) Gross Profit (a-b) </p>
|
||||||
</ng-template>
|
|
||||||
</mat-expansion-panel>
|
|
||||||
|
|
||||||
<mat-expansion-panel>
|
|
||||||
<mat-expansion-panel-header>
|
|
||||||
<mat-panel-title>
|
|
||||||
<small class="expan_table_header">Purchase Details</small>
|
|
||||||
</mat-panel-title>
|
|
||||||
<mat-panel-description class="subtitle_message">
|
|
||||||
{{purchaseDetails.length}} Items
|
|
||||||
</mat-panel-description>
|
|
||||||
</mat-expansion-panel-header>
|
|
||||||
<ng-template matExpansionPanelContent>
|
|
||||||
<div class="example-container mat-elevation-z8">
|
|
||||||
<table mat-table [dataSource]="purchaseDetails">
|
|
||||||
<!-- Item Column -->
|
|
||||||
<ng-container matColumnDef="Item">
|
|
||||||
<th mat-header-cell *matHeaderCellDef>Item</th>
|
|
||||||
<td mat-cell *matCellDef="let purchaseItem">{{purchaseItem.purchase_item}} </td>
|
|
||||||
</ng-container>
|
|
||||||
<!-- Qty/Uom Column-->
|
|
||||||
<ng-container matColumnDef="Qty/UOM">
|
|
||||||
<th mat-header-cell *matHeaderCellDef>Qty/UOM</th>
|
|
||||||
<td mat-cell *matCellDef="let purchaseItem">{{purchaseItem.purchase_qty }}/{{purchaseItem.uom_name }} </td>
|
|
||||||
</ng-container>
|
|
||||||
<!-- Rate/Unit Column-->
|
|
||||||
<ng-container matColumnDef="Rate/Unit">
|
|
||||||
<th mat-header-cell *matHeaderCellDef>Rate/Unit</th>
|
|
||||||
<td mat-cell *matCellDef="let purchaseItem"> {{purchaseItem.rate_per_unit }} </td>
|
|
||||||
</ng-container>
|
|
||||||
<!-- Frequency Name Column -->
|
|
||||||
|
|
||||||
<ng-container matColumnDef="Frequency">
|
|
||||||
<th mat-header-cell *matHeaderCellDef>Frequency</th>
|
|
||||||
<td mat-cell *matCellDef="let purchaseItem"> {{purchaseItem.frequency_name}} </td>
|
|
||||||
</ng-container>
|
|
||||||
<!-- Annual Sale Value Column-->
|
|
||||||
<ng-container matColumnDef="Annual Purchase Value">
|
|
||||||
<th mat-header-cell *matHeaderCellDef>Annual Purchase Value</th>
|
|
||||||
<td mat-cell *matCellDef="let purchaseItem"> {{purchaseItem.annual_purchase_value}} </td>
|
|
||||||
</ng-container>
|
|
||||||
|
|
||||||
<tr mat-header-row *matHeaderRowDef="purchaseDetailsColumns; sticky: true"></tr>
|
|
||||||
<tr mat-row *matRowDef="let row; columns: purchaseDetailsColumns;"></tr>
|
|
||||||
</table>
|
|
||||||
</div>
|
</div>
|
||||||
</ng-template>
|
<div fxFlex.xs="30" fxFlex.sm="30" fxFlex.md="20" fxFlex.lg="25" fxFlex.xl="25" class="mat_list_center_div">
|
||||||
</mat-expansion-panel>
|
<p matLine> {{gross_profit_value}} </p>
|
||||||
<mat-expansion-panel>
|
|
||||||
<mat-expansion-panel-header>
|
|
||||||
<mat-panel-title>
|
|
||||||
<small class="expan_table_header">Business Expenses</small>
|
|
||||||
</mat-panel-title>
|
|
||||||
<mat-panel-description class="subtitle_message">
|
|
||||||
{{businessExpenses.length}} Items
|
|
||||||
</mat-panel-description>
|
|
||||||
</mat-expansion-panel-header>
|
|
||||||
<ng-template matExpansionPanelContent>
|
|
||||||
<div class="example-container mat-elevation-z8">
|
|
||||||
<table mat-table [dataSource]="businessExpenses">
|
|
||||||
<!-- Expense Item Column -->
|
|
||||||
<ng-container matColumnDef="Item">
|
|
||||||
<th mat-header-cell *matHeaderCellDef>Item</th>
|
|
||||||
<td mat-cell *matCellDef="let businessEx"> {{businessEx.expense_item}} </td>
|
|
||||||
</ng-container>
|
|
||||||
|
|
||||||
<!-- Expense Value Column-->
|
|
||||||
<ng-container matColumnDef="Value">
|
|
||||||
<th mat-header-cell *matHeaderCellDef>Value</th>
|
|
||||||
<td mat-cell *matCellDef="let businessEx"> {{businessEx.expense_value }} </td>
|
|
||||||
</ng-container>
|
|
||||||
<!-- Frequency Name Column -->
|
|
||||||
<ng-container matColumnDef="Frequency">
|
|
||||||
<th mat-header-cell *matHeaderCellDef>Frequency</th>
|
|
||||||
<td mat-cell *matCellDef="let businessEx"> {{businessEx.frequency_name}} </td>
|
|
||||||
</ng-container>
|
|
||||||
<!-- Annual Expenses Value Column-->
|
|
||||||
<ng-container matColumnDef="Annual Expenses Value">
|
|
||||||
<th mat-header-cell *matHeaderCellDef>Annual Expenses Value</th>
|
|
||||||
<td mat-cell *matCellDef="let businessEx"> {{businessEx.annual_expenses_value}} </td>
|
|
||||||
</ng-container>
|
|
||||||
|
|
||||||
<tr mat-header-row *matHeaderRowDef="businessExpensesColumns; sticky: true"></tr>
|
|
||||||
<tr mat-row *matRowDef="let row; columns: businessExpensesColumns;"></tr>
|
|
||||||
</table>
|
|
||||||
</div>
|
</div>
|
||||||
</ng-template>
|
|
||||||
</mat-expansion-panel>
|
|
||||||
<mat-expansion-panel>
|
|
||||||
<mat-expansion-panel-header>
|
|
||||||
<mat-panel-title>
|
|
||||||
<small class="expan_table_header">House Hold Expenses</small>
|
|
||||||
</mat-panel-title>
|
|
||||||
<mat-panel-description class="subtitle_message">
|
|
||||||
{{houseHoldExpenses.length}} Items
|
|
||||||
</mat-panel-description>
|
|
||||||
</mat-expansion-panel-header>
|
|
||||||
<ng-template matExpansionPanelContent>
|
|
||||||
<div class="example-container mat-elevation-z8">
|
|
||||||
<table mat-table [dataSource]="houseHoldExpenses">
|
|
||||||
<!-- Item Column -->
|
|
||||||
<ng-container matColumnDef="Item">
|
|
||||||
<th mat-header-cell *matHeaderCellDef>Item</th>
|
|
||||||
<td mat-cell *matCellDef="let householdItem">{{householdItem.expense_item}} </td>
|
|
||||||
</ng-container>
|
|
||||||
<!-- Value Column-->
|
|
||||||
<ng-container matColumnDef="Value">
|
|
||||||
<th mat-header-cell *matHeaderCellDef>Value</th>
|
|
||||||
<td mat-cell *matCellDef="let householdItem">{{householdItem.expense_value }}</td>
|
|
||||||
</ng-container>
|
|
||||||
<!-- Frequency Name Column -->
|
|
||||||
<ng-container matColumnDef="Frequency">
|
|
||||||
<th mat-header-cell *matHeaderCellDef>Frequency</th>
|
|
||||||
<td mat-cell *matCellDef="let householdItem"> {{householdItem.frequency_name}} </td>
|
|
||||||
</ng-container>
|
|
||||||
<!-- Annual Expense Value Column-->
|
|
||||||
<ng-container matColumnDef="Annual Expenses Value">
|
|
||||||
<th mat-header-cell *matHeaderCellDef>Annual Expenses Value</th>
|
|
||||||
<td mat-cell *matCellDef="let householdItem"> {{householdItem.annual_expense_value}} </td>
|
|
||||||
</ng-container>
|
|
||||||
|
|
||||||
<tr mat-header-row *matHeaderRowDef="houseHoldExpensesColumns; sticky: true"></tr>
|
</mat-list-item>
|
||||||
<tr mat-row *matRowDef="let row; columns: houseHoldExpensesColumns;"></tr>
|
<mat-list-item (click)='matgroup.selectedIndex = 5'>
|
||||||
</table>
|
<div fxFlex.xs="70" fxFlex.sm="70" fxFlex.md="50" fxFlex.lg="40" fxFlex.xl="40">
|
||||||
|
<p matLine> d) Other Income </p>
|
||||||
|
</div>
|
||||||
|
<div fxFlex.xs="30" fxFlex.sm="30" fxFlex.md="20" fxFlex.lg="25" fxFlex.xl="25" class="mat_list_center_div">
|
||||||
|
<p matLine> {{other_income_value}}</p>
|
||||||
</div>
|
</div>
|
||||||
</ng-template>
|
|
||||||
</mat-expansion-panel>
|
|
||||||
</mat-accordion>
|
|
||||||
|
|
||||||
|
</mat-list-item>
|
||||||
|
<mat-list-item (click)='matgroup.selectedIndex = 3'>
|
||||||
|
<div fxFlex.xs="70" fxFlex.sm="70" fxFlex.md="50" fxFlex.lg="40" fxFlex.xl="40">
|
||||||
|
<p matLine> e) Other Expenses </p>
|
||||||
|
</div>
|
||||||
|
<div fxFlex.xs="30" fxFlex.sm="30" fxFlex.md="20" fxFlex.lg="25" fxFlex.xl="25" class="mat_list_center_div">
|
||||||
|
<p matLine> {{other_expense_value}} </p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</mat-list-item>
|
||||||
|
<mat-list-item>
|
||||||
|
<div fxFlex.xs="70" fxFlex.sm="70" fxFlex.md="50" fxFlex.lg="40" fxFlex.xl="40">
|
||||||
|
<p matLine> f) Net Profit (c+d-e) </p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div fxFlex.xs="30" fxFlex.sm="30" fxFlex.md="20" fxFlex.lg="25" fxFlex.xl="25" class="mat_list_center_div">
|
||||||
|
<p matLine> {{net_profit_value}} </p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</mat-list-item>
|
||||||
|
<mat-list-item (click)='matgroup.selectedIndex = 4'>
|
||||||
|
<div fxFlex.xs="70" fxFlex.sm="70" fxFlex.md="50" fxFlex.lg="40" fxFlex.xl="40">
|
||||||
|
<p matLine> g) Household Expenses </p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div fxFlex.xs="30" fxFlex.sm="30" fxFlex.md="20" fxFlex.lg="25" fxFlex.xl="25" class="mat_list_center_div">
|
||||||
|
<p matLine> {{house_hold_value}} </p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</mat-list-item>
|
||||||
|
<mat-list-item>
|
||||||
|
<div fxFlex.xs="70" fxFlex.sm="70" fxFlex.md="50" fxFlex.lg="40" fxFlex.xl="40">
|
||||||
|
<p matLine> h) Net Disposable Income (f-g) </p>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div fxFlex.xs="30" fxFlex.sm="30" fxFlex.md="20" fxFlex.lg="25" fxFlex.xl="25" class="mat_list_center_div">
|
||||||
|
<p matLine> {{net_disable_income_value}} </p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</mat-list-item>
|
||||||
|
|
||||||
|
|
||||||
|
</mat-nav-list>
|
||||||
</mat-card-content>
|
</mat-card-content>
|
||||||
</mat-card>
|
</mat-card>
|
||||||
|
|
||||||
</div>
|
</ng-template>
|
||||||
</div>
|
</mat-tab>
|
||||||
|
<mat-tab label="Sales">
|
||||||
|
<ng-template matTabContent>
|
||||||
|
<app-gross-profit-calculation [masterData]="getCustomValues" [parentData]="grossProfitTypeList" (loadAssessedForms)="loadAIDetails()"></app-gross-profit-calculation>
|
||||||
|
<app-sales-calculation [masterData]="getCustomValues" [parentData]="salesDeclaredCustomer" (loadAssessedForms)="loadAIDetails()"></app-sales-calculation>
|
||||||
|
<app-sales-details [masterData]="getCustomValues" [parentData]="salesCaluatedItem" (loadAssessedForms)="loadAIDetails()"></app-sales-details>
|
||||||
|
<app-daily-sales-details [masterData]="getCustomValues" [parentData]="salesMonthWiseExpandedItems" (loadAssessedForms)="loadAIDetails()"></app-daily-sales-details>
|
||||||
|
</ng-template>
|
||||||
|
</mat-tab>
|
||||||
|
<mat-tab label="Purchase">
|
||||||
|
<ng-template matTabContent>
|
||||||
|
<app-gross-profit-calculation [masterData]="getCustomValues" [parentData]="grossProfitTypeList" (loadAssessedForms)="loadAIDetails()"></app-gross-profit-calculation>
|
||||||
|
<app-purchase-details [masterData]="getCustomValues" [parentData]="purchaseDetails" (loadAssessedForms)="loadAIDetails()"></app-purchase-details>
|
||||||
|
</ng-template>
|
||||||
|
</mat-tab>
|
||||||
|
<mat-tab label="Business Expense">
|
||||||
|
<ng-template matTabContent>
|
||||||
|
<app-business-expense-details [masterData]="getCustomValues" [parentData]="businessExpenses" (loadAssessedForms)="loadAIDetails()"></app-business-expense-details>
|
||||||
|
</ng-template>
|
||||||
|
</mat-tab>
|
||||||
|
<mat-tab label="House Hold">
|
||||||
|
<ng-template matTabContent>
|
||||||
|
<app-house-hold-details [masterData]="getCustomValues" [parentData]="houseHoldExpenses" (loadAssessedForms)="loadAIDetails()"></app-house-hold-details>
|
||||||
|
</ng-template>
|
||||||
|
</mat-tab>
|
||||||
|
<mat-tab label="Other Business Income">
|
||||||
|
<ng-template matTabContent>
|
||||||
|
<app-other-business-income-details [masterData]="getCustomValues" [parentData]="otherBusinessIncome" (loadAssessedForms)="loadAIDetails()"></app-other-business-income-details>
|
||||||
|
|
||||||
</ng-template>
|
</ng-template>
|
||||||
</mat-tab>
|
</mat-tab>
|
||||||
<mat-tab label="Docs">
|
<mat-tab label="Docs">
|
||||||
@ -374,8 +229,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
</mat-tab>
|
</mat-tab>
|
||||||
|
|
||||||
</mat-tab-group>
|
</mat-tab-group>
|
||||||
|
<!-- end assessed income tabs control -->
|
||||||
|
|
||||||
</mat-dialog-content>
|
</mat-dialog-content>
|
||||||
<mat-dialog-actions>
|
<mat-dialog-actions>
|
||||||
@ -388,7 +243,7 @@
|
|||||||
<div fxFlex="40" align="end">
|
<div fxFlex="40" align="end">
|
||||||
<button mat-raised-button mat-icon-button class="mr-1 mb-1 hover-icon" type="submit" matTooltip="Save" matTooltipPosition="above"><mat-icon>save</mat-icon></button>
|
<button mat-raised-button mat-icon-button class="mr-1 mb-1 hover-icon" type="submit" matTooltip="Save" matTooltipPosition="above"><mat-icon>save</mat-icon></button>
|
||||||
</div> -->
|
</div> -->
|
||||||
|
|
||||||
</mat-dialog-actions>
|
</mat-dialog-actions>
|
||||||
|
|
||||||
</form>
|
|
||||||
<notifier-container></notifier-container>
|
<notifier-container></notifier-container>
|
||||||
@ -3,35 +3,11 @@
|
|||||||
overflow: auto;
|
overflow: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
table {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
tr.mat-footer-row {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mat-table-sticky {
|
|
||||||
border-top: 1px solid #e0e0e0;
|
|
||||||
}
|
|
||||||
|
|
||||||
::ng-deep .cdk-global-overlay-wrapper{
|
::ng-deep .cdk-global-overlay-wrapper{
|
||||||
justify-content: center !important;
|
justify-content: center !important;
|
||||||
}
|
}
|
||||||
.mat-form-field {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
.expan_footer{
|
|
||||||
font-size: 18px;
|
|
||||||
direction: rtl;
|
|
||||||
}
|
|
||||||
.expan_table_header {
|
|
||||||
font-size: 18px;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
.h4_font {
|
|
||||||
font-size: 18px;
|
|
||||||
}
|
|
||||||
.subtitle_message {
|
.subtitle_message {
|
||||||
color:#e00201 !important;
|
color:#e00201 !important;
|
||||||
}
|
}
|
||||||
@ -144,4 +120,21 @@ tr.mat-footer-row {
|
|||||||
border:1px solid rgba(0, 0, 0, 0.12);
|
border:1px solid rgba(0, 0, 0, 0.12);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mat-list-item:nth-child(3) {
|
||||||
|
background-color: #f5f5f5;
|
||||||
|
}
|
||||||
|
mat-list-item:nth-child(6) {
|
||||||
|
background-color: #f5f5f5;
|
||||||
|
}
|
||||||
|
mat-list-item:nth-child(8) {
|
||||||
|
background-color: #f5f5f5;
|
||||||
|
}
|
||||||
|
.mat_list_right_div {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
.mat_list_center_div {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -1,5 +1,4 @@
|
|||||||
import {Component,OnInit,Inject,Input, ViewChild } from '@angular/core';
|
import {Component,OnInit,Inject,Input, ViewChild } from '@angular/core';
|
||||||
import {FormBuilder,FormGroup,Validators,FormArray, FormControl,} from '@angular/forms';
|
|
||||||
import { NotifierService } from 'angular-notifier';
|
import { NotifierService } from 'angular-notifier';
|
||||||
import {
|
import {
|
||||||
MatDialog,
|
MatDialog,
|
||||||
@ -16,42 +15,65 @@ import { ActivatedRoute, Router } from "@angular/router";
|
|||||||
styleUrls: ['./assessed-income.component.scss']
|
styleUrls: ['./assessed-income.component.scss']
|
||||||
})
|
})
|
||||||
export class AssessedIncomeComponent implements OnInit {
|
export class AssessedIncomeComponent implements OnInit {
|
||||||
public _assessedIncomeFormFrom: FormGroup;
|
|
||||||
private notifier: NotifierService;
|
private notifier: NotifierService;
|
||||||
pageTitle: string ="Assessed Income Details";
|
pageTitle: string ="Assessed Income Details";
|
||||||
// @Input() pdid: number;
|
// @Input() pdid: number;
|
||||||
// @Input() form_id: number;
|
// @Input() form_id: number;
|
||||||
pdid: number;
|
pdid: number;
|
||||||
form_id: number;
|
form_id: number;
|
||||||
salesCaluatedItemColumns: string[] = ['Item', 'Qty/UOM','Rate/Unit','Frequency','Annual Sale Value'];
|
displayedColumns = ['sno','list','amount'];
|
||||||
|
sales_value: number;
|
||||||
|
purchase_value: number;
|
||||||
|
gross_profit_value: number;
|
||||||
|
other_income_value: number;
|
||||||
|
other_expense_value: number;
|
||||||
|
net_profit_value: number;
|
||||||
|
house_hold_value: number;
|
||||||
|
net_disable_income_value: number;
|
||||||
public salesCaluatedItem:any= [];
|
public salesCaluatedItem:any= [];
|
||||||
salesItemMonthWiseColumns: string[] = ['Item', 'Value','Frequency','Annual Expenses Value'];
|
|
||||||
public salesItemMonthWise:any= [];
|
public salesItemMonthWise:any= [];
|
||||||
purchaseDetailsColumns: string[] = ['Item', 'Qty/UOM','Rate/Unit','Frequency','Annual Purchase Value'];
|
|
||||||
public purchaseDetails:any= [];
|
public purchaseDetails:any= [];
|
||||||
businessExpensesColumns: string[] = ['Item', 'Value','Frequency','Annual Expenses Value'];
|
|
||||||
public businessExpenses:any= [];
|
public businessExpenses:any= [];
|
||||||
houseHoldExpensesColumns: string[] = ['Item', 'Value','Frequency','Annual Expenses Value'];
|
|
||||||
public houseHoldExpenses:any= [];
|
public houseHoldExpenses:any= [];
|
||||||
|
public otherBusinessIncome: any=[];
|
||||||
public salesMonthItemColumns = ['Date','Amount'];
|
|
||||||
|
|
||||||
|
|
||||||
// Sales Item MonthWise declare table header,body andd footer elements
|
// Sales Item MonthWise declare table header,body andd footer elements
|
||||||
salesMonthWiseTable:any=[];
|
salesMonthWiseTable:any=[];
|
||||||
salesItemMonthWiseBody: any[];
|
salesItemMonthWiseBody: any[];
|
||||||
salesItemMonthWiseFooter: any[];
|
salesItemMonthWiseFooter: any[];
|
||||||
|
|
||||||
salesMonthWiseExpandedItems: any=[]
|
salesMonthWiseExpandedItems: any=[]
|
||||||
|
|
||||||
|
public UOMList: any=[];
|
||||||
constructor(notifier: NotifierService, private fb: FormBuilder, private route: ActivatedRoute,
|
public frequencyList: any=[];
|
||||||
|
public businessExpenseList: any=[];
|
||||||
|
public businessIncomeList: any=[];
|
||||||
|
public grossProfitTypeList: any=[];
|
||||||
|
public salesDeclaredCustomer: any=[];
|
||||||
|
public getCustomValues:any = { UOMList: this.UOMList,frequencyList: this.frequencyList,businessExpenseList: this.businessExpenseList,businessIncomeList:this.businessIncomeList,pdid:'',grossProfitTypeList:this.grossProfitTypeList};
|
||||||
|
//public finalData: any;
|
||||||
|
constructor(notifier: NotifierService, private route: ActivatedRoute,
|
||||||
private router: Router,
|
private router: Router,
|
||||||
private _pd: PdTrigerService,
|
private _pd: PdTrigerService,
|
||||||
@Inject(MAT_DIALOG_DATA) public pd_all_details: any) {
|
@Inject(MAT_DIALOG_DATA) public pd_all_details: any) {
|
||||||
this.pdid = this.pd_all_details.pdmaster_details.pd_id;
|
this.pdid = this.pd_all_details.pdmaster_details.pd_id;
|
||||||
this.notifier = notifier;
|
this.notifier = notifier;
|
||||||
this.form_id = 16;
|
this.form_id = 16;
|
||||||
|
this.loadAIDetails();
|
||||||
|
this.getAIMaster('UOM',1);
|
||||||
|
this.getAIMaster('FREQUENCY',2);
|
||||||
|
this.getAIMaster('BUSINESSEXPENSES',3);
|
||||||
|
this.getAIMaster('BUSINESSINCOME',4);
|
||||||
|
this.getCustomValues.pdid = this.pd_all_details.pdmaster_details.pd_id;
|
||||||
|
this.sales_value=0;
|
||||||
|
this.purchase_value=0;
|
||||||
|
this.gross_profit_value=0;
|
||||||
|
this.other_income_value=0;
|
||||||
|
this.other_expense_value=0;
|
||||||
|
this.net_profit_value=0;
|
||||||
|
this.house_hold_value=0;
|
||||||
|
this.net_disable_income_value=0;
|
||||||
|
|
||||||
}
|
}
|
||||||
public viewerOptions: any = {
|
public viewerOptions: any = {
|
||||||
navbar: false,
|
navbar: false,
|
||||||
@ -74,18 +96,21 @@ public viewerOptions: any = {
|
|||||||
};
|
};
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
|
|
||||||
this.initAssessedIncomeForm();
|
}
|
||||||
|
// load ai details
|
||||||
|
loadAIDetails(): void{
|
||||||
|
this.salesMonthWiseExpandedItems=[]
|
||||||
let params: any = {};
|
let params: any = {};
|
||||||
params.pd_id = this.pdid;
|
params.pd_id = this.pdid;
|
||||||
params.pd_form_id = this.form_id;
|
params.pd_form_id = this.form_id;
|
||||||
this._pd.getAssessedIncomeFormDetails(params).subscribe(value => {
|
this._pd.getAssessedIncomeFormDetails(params).subscribe(value => {
|
||||||
if (value.status == 200) {
|
if (value.status == 200) {
|
||||||
if(value.records.sales_declared_by_customer){
|
if(value.records.gross_profit_calculation_type){
|
||||||
this._assessedIncomeFormFrom.controls['sales_declared_by_customer'].setValue(value.records.sales_declared_by_customer[0].sales_declared_by_customer);
|
this.grossProfitTypeList = value.records.gross_profit_calculation_type;
|
||||||
|
this.getCustomValues.grossProfitTypeList=this.grossProfitTypeList;
|
||||||
}
|
}
|
||||||
else{
|
if(value.records.sales_declared_by_customer){
|
||||||
this._assessedIncomeFormFrom.controls['sales_declared_by_customer'].setValue('');
|
this.salesDeclaredCustomer = value.records.sales_declared_by_customer;
|
||||||
|
|
||||||
}
|
}
|
||||||
if(value.records.sales_calculated_by_itemwise){
|
if(value.records.sales_calculated_by_itemwise){
|
||||||
this.salesCaluatedItem = value.records.sales_calculated_by_itemwise;
|
this.salesCaluatedItem = value.records.sales_calculated_by_itemwise;
|
||||||
@ -142,10 +167,8 @@ public viewerOptions: any = {
|
|||||||
// message: ' Yearly ' + itemElement.sales_item + ' Sales Arrived',
|
// message: ' Yearly ' + itemElement.sales_item + ' Sales Arrived',
|
||||||
// value: calculateAllItemsTotal * convertYear,
|
// value: calculateAllItemsTotal * convertYear,
|
||||||
// })
|
// })
|
||||||
this.salesMonthWiseExpandedItems.push({salesItem:itemElement.sales_item, expandElements:expandBodyContent, footerMessage: footerMessage});
|
this.salesMonthWiseExpandedItems.push({sim_id:itemElement.sim_id,salesItem:itemElement.sales_item,margin_per:itemElement.margin_per,margin_value:itemElement.margin_value, expandElements:expandBodyContent, footerMessage: footerMessage});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
if(value.records.purchase_details){
|
if(value.records.purchase_details){
|
||||||
this.purchaseDetails = value.records.purchase_details;
|
this.purchaseDetails = value.records.purchase_details;
|
||||||
@ -156,6 +179,22 @@ public viewerOptions: any = {
|
|||||||
if(value.records.house_hold_expenses){
|
if(value.records.house_hold_expenses){
|
||||||
this.houseHoldExpenses = value.records.house_hold_expenses;
|
this.houseHoldExpenses = value.records.house_hold_expenses;
|
||||||
}
|
}
|
||||||
|
if(value.records.othre_business_income){
|
||||||
|
this.otherBusinessIncome = value.records.othre_business_income;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(value.records.final_data.length >0){
|
||||||
|
// this.finalData = value.records.final_data[0];
|
||||||
|
|
||||||
|
this.sales_value = value.records.final_data[0].income.sales_revenue !='' && value.records.final_data[0].income.sales_revenue !=null ? value.records.final_data[0].income.sales_revenue : 0;
|
||||||
|
this.purchase_value = value.records.final_data[0].expense.purchase !='' && value.records.final_data[0].expense.purchase !=null ? value.records.final_data[0].expense.purchase : 0;
|
||||||
|
this.gross_profit_value = value.records.final_data[0].gross_profit !='' && value.records.final_data[0].gross_profit !=null ? value.records.final_data[0].gross_profit : 0;
|
||||||
|
this.other_income_value = value.records.final_data[0].income.other_business_income !='' && value.records.final_data[0].income.other_business_income !=null ? value.records.final_data[0].income.other_business_income : 0;
|
||||||
|
this.other_expense_value = value.records.final_data[0].expense.business_expense !='' && value.records.final_data[0].expense.business_expense !=null ? value.records.final_data[0].expense.business_expense : 0;
|
||||||
|
this.net_profit_value = value.records.final_data[0].expense.net_profit !='' && value.records.final_data[0].expense.net_profit !=null ? value.records.final_data[0].expense.net_profit : 0;
|
||||||
|
this.house_hold_value = 0;
|
||||||
|
this.net_disable_income_value = this.net_profit_value-this.house_hold_value;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
})
|
})
|
||||||
@ -166,14 +205,29 @@ public viewerOptions: any = {
|
|||||||
return getItems.map(t => t.sales_value).reduce((acc, value) => acc + Number(value), 0);
|
return getItems.map(t => t.sales_value).reduce((acc, value) => acc + Number(value), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// get common drop down list
|
||||||
|
getAIMaster(table:string, type:Number):void {
|
||||||
|
this._pd.getAllMasterDatas(table).subscribe(
|
||||||
|
data => {
|
||||||
|
if (data.dataStatus == true) {
|
||||||
|
if(type==1){
|
||||||
|
this.UOMList = data.records.filter(uom=>uom.isactive==1);
|
||||||
|
this.getCustomValues.UOMList= this.UOMList;
|
||||||
|
}
|
||||||
|
if(type==2){
|
||||||
|
this.frequencyList = data.records.filter(frq=>frq.isactive==1);
|
||||||
|
this.getCustomValues.frequencyList= this.frequencyList;
|
||||||
|
}
|
||||||
|
if(type==3) {
|
||||||
|
this.businessExpenseList = data.records.filter(val=>val.isactive==1);
|
||||||
|
this.getCustomValues.businessExpenseList= this.businessExpenseList;
|
||||||
|
}
|
||||||
|
if(type==4){
|
||||||
|
this.businessIncomeList=data.records.filter(val=>val.isactive==1);
|
||||||
|
this.getCustomValues.businessIncomeList= this.businessIncomeList;
|
||||||
|
|
||||||
// Dynamic Form field creation
|
}
|
||||||
|
}
|
||||||
public initAssessedIncomeForm(): void {
|
|
||||||
this._assessedIncomeFormFrom = this.fb.group({
|
|
||||||
sales_declared_by_customer: ['', Validators.compose([Validators.required])],
|
|
||||||
// lender_representative_details: this.fb.array([]),
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,56 @@
|
|||||||
|
<mat-card>
|
||||||
|
<mat-card-content>
|
||||||
|
<div fxLayout="row nowrap">
|
||||||
|
<div fxFlex="60" align="left">
|
||||||
|
<span>Business Expense Items</span>
|
||||||
|
</div>
|
||||||
|
<div fxFlex="40" align="right">
|
||||||
|
<button type="button" mat-flat-button (click)="addMoreItem()"
|
||||||
|
matTooltip="Add More" matTooltipPosition="above" color="primary">
|
||||||
|
<strong>Add More Item</strong>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="example-container mat-elevation-z8">
|
||||||
|
<table mat-table [dataSource]="businessItemSource">
|
||||||
|
|
||||||
|
<ng-container matColumnDef="buiness_expense" sticky>
|
||||||
|
<th mat-header-cell *matHeaderCellDef> Buiness Expense </th>
|
||||||
|
<td mat-cell *matCellDef="let element"> {{element.expense_item}} </td>
|
||||||
|
</ng-container>
|
||||||
|
|
||||||
|
<ng-container matColumnDef="expense_value">
|
||||||
|
<th mat-header-cell *matHeaderCellDef> Amount (Rs) </th>
|
||||||
|
<td mat-cell *matCellDef="let element"> {{element.expense_value}} </td>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="frequency">
|
||||||
|
<th mat-header-cell *matHeaderCellDef> Frequency </th>
|
||||||
|
<td mat-cell *matCellDef="let element">{{element.frequency_name}}
|
||||||
|
</td>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="annual_expenses">
|
||||||
|
<th mat-header-cell *matHeaderCellDef> Annual Expenses </th>
|
||||||
|
<td mat-cell *matCellDef="let element">{{element.annual_expenses_value}}
|
||||||
|
</td>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="action" stickyEnd>
|
||||||
|
<th mat-header-cell *matHeaderCellDef></th>
|
||||||
|
<td mat-cell *matCellDef="let element">
|
||||||
|
<button mat-mini-fab matTooltip="Edit" class="mr-1 mb-1" matTooltipPosition="left" (click)="editExpenseItem(element)" color="primary">
|
||||||
|
<mat-icon>edit</mat-icon>
|
||||||
|
</button>
|
||||||
|
<button class="mr-1 mb-1" mat-mini-fab matTooltip="Remove" matTooltipPosition="above" (click)="removeExpenseItem(element)" color="primary" type="button">
|
||||||
|
<mat-icon>delete</mat-icon>
|
||||||
|
</button>
|
||||||
|
</td>
|
||||||
|
</ng-container>
|
||||||
|
|
||||||
|
<tr mat-header-row *matHeaderRowDef="displayedColumns; sticky:true"></tr>
|
||||||
|
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</mat-card-content>
|
||||||
|
</mat-card>
|
||||||
|
<notifier-container></notifier-container>
|
||||||
|
|
||||||
|
|
||||||
@ -0,0 +1,30 @@
|
|||||||
|
.example-container {
|
||||||
|
max-height: 280px;
|
||||||
|
width: 100%;
|
||||||
|
overflow: auto;
|
||||||
|
margin-top: 2%;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
td{
|
||||||
|
padding-right: 2%;
|
||||||
|
padding-left: 2%;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
th {
|
||||||
|
padding-left: 2%;
|
||||||
|
padding-right: 2%;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mat-table-sticky:first-child {
|
||||||
|
border-right: 1px solid #e0e0e0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mat-table-sticky:last-child {
|
||||||
|
border-left: 1px solid #e0e0e0;
|
||||||
|
}
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { BusinessExpenseDetailsComponent } from './business-expense-details.component';
|
||||||
|
|
||||||
|
describe('BusinessExpenseDetailsComponent', () => {
|
||||||
|
let component: BusinessExpenseDetailsComponent;
|
||||||
|
let fixture: ComponentFixture<BusinessExpenseDetailsComponent>;
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
declarations: [ BusinessExpenseDetailsComponent ]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
fixture = TestBed.createComponent(BusinessExpenseDetailsComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
@ -0,0 +1,88 @@
|
|||||||
|
import { Component, OnInit, Input, Output, Inject, OnChanges,SimpleChanges, EventEmitter } from '@angular/core';
|
||||||
|
import { PdTrigerService } from './../../../../../../pd-service/pd-triger.service';
|
||||||
|
import {MatDialog,MatDialogRef,MAT_DIALOG_DATA, MatTableDataSource} from '@angular/material';
|
||||||
|
import { ManageBusinesExpenseComponent } from './../AI-diologue/manage-busines-expense/manage-busines-expense.component';
|
||||||
|
import { NotifierService } from 'angular-notifier';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-business-expense-details',
|
||||||
|
templateUrl: './business-expense-details.component.html',
|
||||||
|
styleUrls: ['./business-expense-details.component.scss']
|
||||||
|
})
|
||||||
|
export class BusinessExpenseDetailsComponent implements OnInit {
|
||||||
|
|
||||||
|
displayedColumns = ['buiness_expense','expense_value','frequency','annual_expenses','action'];
|
||||||
|
public businessItemSource= new MatTableDataSource();
|
||||||
|
@Input() parentData: any;
|
||||||
|
@Input() masterData: { UOMList: any; frequencyList: any;businessExpenseList:any; pdid:number};
|
||||||
|
@Output() loadAssessedForms = new EventEmitter<string>();
|
||||||
|
private notifier: NotifierService;
|
||||||
|
constructor(notifier: NotifierService,private _pd: PdTrigerService, private dialog: MatDialog) {
|
||||||
|
this.notifier= notifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
}
|
||||||
|
|
||||||
|
// add more item details
|
||||||
|
addMoreItem():void {
|
||||||
|
let passValues: any = {
|
||||||
|
manage_status:1,
|
||||||
|
masterData: this.masterData
|
||||||
|
}
|
||||||
|
const dialogRef = this.dialog.open(ManageBusinesExpenseComponent, {
|
||||||
|
data: passValues,
|
||||||
|
position: { right: '0'},
|
||||||
|
width:'80%',
|
||||||
|
disableClose: true
|
||||||
|
});
|
||||||
|
dialogRef.afterClosed()
|
||||||
|
.subscribe(dataresult => {
|
||||||
|
if(dataresult.update_status==true){
|
||||||
|
this.loadAssessedForms.next('1');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
editExpenseItem(value:any) {
|
||||||
|
let passValues: any = {
|
||||||
|
manage_status:2,
|
||||||
|
masterData: this.masterData,
|
||||||
|
editData:value
|
||||||
|
}
|
||||||
|
const dialogRef = this.dialog.open(ManageBusinesExpenseComponent, {
|
||||||
|
data: passValues,
|
||||||
|
position: { right: '0'},
|
||||||
|
width:'80%',
|
||||||
|
disableClose: true
|
||||||
|
});
|
||||||
|
dialogRef.afterClosed()
|
||||||
|
.subscribe(dataresult => {
|
||||||
|
if(dataresult.update_status==true){
|
||||||
|
this.loadAssessedForms.next('1');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// remove expense item
|
||||||
|
removeExpenseItem(value: any) : void{
|
||||||
|
|
||||||
|
let deleteRecords: any =[{
|
||||||
|
"fk_pd_id":this.masterData.pdid,
|
||||||
|
"pd_expense_id":value.pd_expense_id,
|
||||||
|
"isactive":false,
|
||||||
|
}];
|
||||||
|
this._pd.saveAssessedDetails('saveAssessedIncomeBusinessExpenses',deleteRecords).subscribe(data => {
|
||||||
|
this.notifier.notify('success','Removed Successfully');
|
||||||
|
this.loadAssessedForms.next('1');
|
||||||
|
}, error => {
|
||||||
|
this.notifier.notify('warning', 'Something Wents Wrong Try Again.!');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// detect chnges from parent
|
||||||
|
ngOnChanges(changes: SimpleChanges) {
|
||||||
|
this.businessItemSource.data = changes.parentData.currentValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,69 @@
|
|||||||
|
<mat-card>
|
||||||
|
<!-- <mat-card-header>
|
||||||
|
<mat-card-title>Sales Calculate Month Wise</mat-card-title>
|
||||||
|
|
||||||
|
</mat-card-header> -->
|
||||||
|
<mat-card-content>
|
||||||
|
<div fxLayout="row nowrap">
|
||||||
|
<div fxFlex="60" align="left">
|
||||||
|
<span>Sales Calculate Daily Wise</span>
|
||||||
|
</div>
|
||||||
|
<div fxFlex="40" align="right">
|
||||||
|
<button type="button" mat-flat-button (click)="addMoreItem()"
|
||||||
|
matTooltip="Add More" matTooltipPosition="above" color="primary">
|
||||||
|
<strong>Add More Item</strong>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<mat-card *ngFor="let expandDetails of salesMonthWiseExpandedItems">
|
||||||
|
<mat-card-header>
|
||||||
|
<mat-card-title>
|
||||||
|
<small class="expan_table_header">{{expandDetails.salesItem}}</small>
|
||||||
|
<small class="expan_table_header" *ngIf="activateMariginCalculation===true">(Margin Percentage % : {{expandDetails.margin_per}} Margin Value : {{expandDetails.margin_value}})</small>
|
||||||
|
</mat-card-title>
|
||||||
|
<mat-card-subtitle *ngFor="let footer of expandDetails.footerMessage">
|
||||||
|
|
||||||
|
<div fxFlex="100" class="subtitle_message">
|
||||||
|
{{footer.month_message}} {{footer.year_message}}
|
||||||
|
</div>
|
||||||
|
</mat-card-subtitle>
|
||||||
|
</mat-card-header>
|
||||||
|
|
||||||
|
<mat-divider></mat-divider>
|
||||||
|
<mat-card-content style="display: flex;margin-top: -20px;">
|
||||||
|
|
||||||
|
<div fxFlex="50" *ngFor="let eachItem of expandDetails.expandElements" class="m-gap p-gap">
|
||||||
|
|
||||||
|
<h4 align="center" class="h4_font">{{eachItem.header}}</h4>
|
||||||
|
<table mat-table [dataSource]="eachItem.value" class="mat-elevation-z8">
|
||||||
|
<ng-container matColumnDef="Date">
|
||||||
|
<th mat-header-cell *matHeaderCellDef>Date</th>
|
||||||
|
<td mat-cell *matCellDef="let itemValue">{{itemValue.sales_date | date: 'dd-MM-yyyy'}} </td>
|
||||||
|
<td mat-footer-cell *matFooterCellDef> Total </td>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="Amount">
|
||||||
|
<th mat-header-cell *matHeaderCellDef>Amount</th>
|
||||||
|
<td mat-cell *matCellDef="let itemValue">{{itemValue.sales_value}}</td>
|
||||||
|
<td mat-footer-cell *matFooterCellDef> {{getTotalCost(eachItem.value)}} </td>
|
||||||
|
</ng-container>
|
||||||
|
|
||||||
|
<tr mat-header-row *matHeaderRowDef="salesMonthItemColumns; sticky: true"></tr>
|
||||||
|
<tr mat-row *matRowDef="let row; columns: salesMonthItemColumns;"></tr>
|
||||||
|
<tr mat-footer-row *matFooterRowDef="salesMonthItemColumns; sticky: true"></tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</mat-card-content>
|
||||||
|
<mat-card-actions align="right">
|
||||||
|
<button class="mr-1 mb-1" mat-mini-fab matTooltip="Edit" matTooltipPosition="above" (click)="editSalesItem(expandDetails)" color="primary" type="button">
|
||||||
|
<mat-icon>edit</mat-icon>
|
||||||
|
</button>
|
||||||
|
<button class="mr-1 mb-1" mat-mini-fab matTooltip="Remove" matTooltipPosition="above" (click)="removeSalesItem(expandDetails)" color="primary" type="button">
|
||||||
|
<mat-icon>delete</mat-icon>
|
||||||
|
</button>
|
||||||
|
</mat-card-actions>
|
||||||
|
|
||||||
|
</mat-card>
|
||||||
|
</mat-card-content>
|
||||||
|
</mat-card>
|
||||||
|
<notifier-container></notifier-container>
|
||||||
@ -0,0 +1,33 @@
|
|||||||
|
.example-container {
|
||||||
|
max-height: 500px;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
tr.mat-footer-row {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mat-table-sticky {
|
||||||
|
border-top: 1px solid #e0e0e0;
|
||||||
|
}
|
||||||
|
.expan_footer{
|
||||||
|
font-size: 18px;
|
||||||
|
direction: rtl;
|
||||||
|
}
|
||||||
|
.expan_table_header {
|
||||||
|
font-size: 18px;
|
||||||
|
//text-align: center;
|
||||||
|
}
|
||||||
|
.h4_font {
|
||||||
|
font-size: 18px;
|
||||||
|
}
|
||||||
|
.subtitle_message {
|
||||||
|
color:#e00201 !important;
|
||||||
|
}
|
||||||
|
.delete-margin {
|
||||||
|
margin-left: 3%;
|
||||||
|
}
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { DailySalesDetailsComponent } from './daily-sales-details.component';
|
||||||
|
|
||||||
|
describe('DailySalesDetailsComponent', () => {
|
||||||
|
let component: DailySalesDetailsComponent;
|
||||||
|
let fixture: ComponentFixture<DailySalesDetailsComponent>;
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
declarations: [ DailySalesDetailsComponent ]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
fixture = TestBed.createComponent(DailySalesDetailsComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
@ -0,0 +1,121 @@
|
|||||||
|
import { Component, OnInit, Input, Output, Inject, DoCheck, EventEmitter } from '@angular/core';
|
||||||
|
import { PdTrigerService } from './../../../../../../pd-service/pd-triger.service';
|
||||||
|
import {MatDialog,MatDialogRef,MAT_DIALOG_DATA, MatTableDataSource} from '@angular/material';
|
||||||
|
import { ManageDailySalesComponent } from './../AI-diologue/manage-daily-sales/manage-daily-sales.component';
|
||||||
|
import { NotifierService } from 'angular-notifier';
|
||||||
|
import { AnyAaaaRecord } from 'dns';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-daily-sales-details',
|
||||||
|
templateUrl: './daily-sales-details.component.html',
|
||||||
|
styleUrls: ['./daily-sales-details.component.scss']
|
||||||
|
})
|
||||||
|
export class DailySalesDetailsComponent implements OnInit, DoCheck {
|
||||||
|
public salesMonthItemColumns = ['Date','Amount'];
|
||||||
|
public salesMonthWiseExpandedItems: any[]=[];
|
||||||
|
@Input() parentData: any;
|
||||||
|
@Input() masterData: { UOMList: any; frequencyList: any; pdid:number, grossProfitTypeList:any};
|
||||||
|
@Output() loadAssessedForms = new EventEmitter<string>();
|
||||||
|
activateMariginCalculation: boolean;
|
||||||
|
private notifier:NotifierService;
|
||||||
|
constructor(notifier:NotifierService, private _pd: PdTrigerService, private dialog: MatDialog) {
|
||||||
|
this.activateMariginCalculation=false;
|
||||||
|
this.notifier = notifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
}
|
||||||
|
|
||||||
|
// get total cost
|
||||||
|
getTotalCost(getItems:any) {
|
||||||
|
return getItems.map(t => t.sales_value).reduce((acc, value) => acc + Number(value), 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// add more item details
|
||||||
|
addMoreItem():void {
|
||||||
|
let passValues: any = {
|
||||||
|
manage_status:1,
|
||||||
|
masterData: this.masterData,
|
||||||
|
margin_calculation_status:this.activateMariginCalculation,
|
||||||
|
}
|
||||||
|
const dialogRef = this.dialog.open(ManageDailySalesComponent, {
|
||||||
|
data: passValues,
|
||||||
|
position: { right: '0'},
|
||||||
|
width:'80%',
|
||||||
|
disableClose: true
|
||||||
|
});
|
||||||
|
dialogRef.afterClosed()
|
||||||
|
.subscribe(dataresult => {
|
||||||
|
if(dataresult.update_status==true){
|
||||||
|
this.loadAssessedForms.next('1');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
editSalesItem(value:any) {
|
||||||
|
let transformData: any = value.expandElements.map(val=>val.value);
|
||||||
|
transformData = [].concat.apply([], transformData);
|
||||||
|
let editValue: any = {
|
||||||
|
"fk_pd_id":this.masterData.pdid,
|
||||||
|
"sim_id":value.sim_id,
|
||||||
|
"salesItem":value.salesItem,
|
||||||
|
"margin_value":value.margin_value,
|
||||||
|
"margin_per":value.margin_per,
|
||||||
|
"values":transformData
|
||||||
|
}
|
||||||
|
let passValues: any = {
|
||||||
|
manage_status:2,
|
||||||
|
masterData: this.masterData,
|
||||||
|
editData:editValue,
|
||||||
|
margin_calculation_status:this.activateMariginCalculation,
|
||||||
|
}
|
||||||
|
const dialogRef = this.dialog.open(ManageDailySalesComponent, {
|
||||||
|
data: passValues,
|
||||||
|
position: { right: '0'},
|
||||||
|
width:'80%',
|
||||||
|
disableClose: true
|
||||||
|
});
|
||||||
|
dialogRef.afterClosed()
|
||||||
|
.subscribe(dataresult => {
|
||||||
|
if(dataresult.update_status==true){
|
||||||
|
this.loadAssessedForms.next('1');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// remove sales item
|
||||||
|
removeSalesItem(value: any) : void{
|
||||||
|
// let transformData: any = value.expandElements.map(val=>val.value);
|
||||||
|
// transformData = [].concat.apply([], transformData);
|
||||||
|
let deleteRecords: any =[{
|
||||||
|
"sim_id":value.sim_id,
|
||||||
|
"isactive":false,
|
||||||
|
"child":[]
|
||||||
|
}];
|
||||||
|
this._pd.saveAssessedDetails('saveAssessedIncomeMonthwiseItems',deleteRecords).subscribe(data => {
|
||||||
|
this.notifier.notify('success','Removed Successfully');
|
||||||
|
this.loadAssessedForms.next('1');
|
||||||
|
}, error => {
|
||||||
|
this.notifier.notify('warning', 'Something Wents Wrong Try Again.!');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// do check component bases
|
||||||
|
ngDoCheck() {
|
||||||
|
this.salesMonthWiseExpandedItems = this.parentData;
|
||||||
|
|
||||||
|
if(this.masterData.grossProfitTypeList.length>0){
|
||||||
|
this.activateMariginCalculation = this.masterData.grossProfitTypeList[this.masterData.grossProfitTypeList.length-1].margin==2 && this.masterData.grossProfitTypeList[this.masterData.grossProfitTypeList.length-1].mode==2 ? true : false;
|
||||||
|
}}
|
||||||
|
|
||||||
|
// detect chnges from parent
|
||||||
|
// ngOnChanges(changes: SimpleChanges) {
|
||||||
|
// this.salesMonthWiseExpandedItems = changes.parentData.currentValue;
|
||||||
|
// if(changes.masterData){
|
||||||
|
// if(changes.masterData.currentValue.grossProfitTypeList.length>0){
|
||||||
|
// this.activateMariginCalculation = changes.masterData.currentValue.grossProfitTypeList[changes.masterData.currentValue.grossProfitTypeList.length-1].margin==2 && changes.masterData.currentValue.grossProfitTypeList[changes.masterData.currentValue.grossProfitTypeList.length-1].mode==2 ? true : false;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,26 @@
|
|||||||
|
<form [formGroup]="grossProfitForm" novalidate>
|
||||||
|
|
||||||
|
<mat-card>
|
||||||
|
<mat-card-header>
|
||||||
|
<!-- <mat-card-title>Purchase Info</mat-card-title> -->
|
||||||
|
</mat-card-header>
|
||||||
|
<mat-card-content>
|
||||||
|
<mat-form-field style="width: 45%">
|
||||||
|
<mat-select placeholder="Purchase Detail Available" formControlName="mode" (selectionChange)="changeOptions(grossProfitForm.value)" required>
|
||||||
|
<mat-option *ngFor="let getData of check__purchse_type" [value]="getData.id">{{getData.name}}</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width: 30%" *ngIf="grossProfitForm.controls['mode'].value == 2">
|
||||||
|
<mat-select placeholder="Sales Type" formControlName="margin">
|
||||||
|
<mat-option *ngFor="let getSale of check_sales_type" [value]="getSale.id">{{getSale.name}}</mat-option>
|
||||||
|
</mat-select>
|
||||||
|
</mat-form-field>
|
||||||
|
<button type="submit" class="mr-1 mb-1 hover-icon" mat-raised-button mat-icon-button matTooltip="Save" matTooltipPosition="above" (click)="submitDetails(grossProfitForm.value)"><mat-icon>save</mat-icon>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
</mat-card-content>
|
||||||
|
<!-- <mat-card-actions align="right">
|
||||||
|
|
||||||
|
</mat-card-actions> -->
|
||||||
|
</mat-card>
|
||||||
|
</form>
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
mat-form-field {
|
||||||
|
margin: 0 2%;
|
||||||
|
}
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { GrossProfitCalculationComponent } from './gross-profit-calculation.component';
|
||||||
|
|
||||||
|
describe('GrossProfitCalculationComponent', () => {
|
||||||
|
let component: GrossProfitCalculationComponent;
|
||||||
|
let fixture: ComponentFixture<GrossProfitCalculationComponent>;
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
declarations: [ GrossProfitCalculationComponent ]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
fixture = TestBed.createComponent(GrossProfitCalculationComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
@ -0,0 +1,79 @@
|
|||||||
|
import { Component, OnInit, Input, Output, Inject,EventEmitter, OnChanges, SimpleChanges } from '@angular/core';
|
||||||
|
import { FormBuilder, FormGroup, Validators, FormControl, FormArray } from '@angular/forms';
|
||||||
|
import { PdTrigerService } from './../../../../../../pd-service/pd-triger.service';
|
||||||
|
import { NotifierService } from 'angular-notifier';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-gross-profit-calculation',
|
||||||
|
templateUrl: './gross-profit-calculation.component.html',
|
||||||
|
styleUrls: ['./gross-profit-calculation.component.scss']
|
||||||
|
})
|
||||||
|
export class GrossProfitCalculationComponent implements OnInit, OnChanges {
|
||||||
|
@Input() masterData: { UOMList: any; frequencyList: any;businessExpenseList:any; pdid:number};
|
||||||
|
@Input() parentData: any;
|
||||||
|
@Output() loadAssessedForms = new EventEmitter<string>();
|
||||||
|
public grossProfitForm: FormGroup;
|
||||||
|
check__purchse_type:any=[{'id':'1','name':'Yes'},{'id':'2','name':'No'}]
|
||||||
|
check_sales_type:any=[{'id':'1','name':'Gross Margin'},{'id':'2','name':'Net Margin'}]
|
||||||
|
private notifier: NotifierService;
|
||||||
|
constructor(notifier: NotifierService,private _fb: FormBuilder, private _pd: PdTrigerService) {
|
||||||
|
this.notifier = notifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
|
||||||
|
}
|
||||||
|
changeOptions(values: any){
|
||||||
|
this.grossProfitForm.controls['margin'].setValue('');
|
||||||
|
}
|
||||||
|
submitDetails(records: any){
|
||||||
|
if (this.grossProfitForm.invalid) {
|
||||||
|
this.validateAllFormFields(this.grossProfitForm);
|
||||||
|
this.notifier.notify('warning',"Please Check All Manatory Fields..");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this._pd.saveAssessedDetails('saveAssessedIncomeCalculateMode',records).subscribe(data => {
|
||||||
|
this.notifier.notify('success','Saved Successfully.');
|
||||||
|
this.loadAssessedForms.next('1');
|
||||||
|
}, error => {
|
||||||
|
this.notifier.notify('warning', 'Something Wents Wrong Try Again.!');
|
||||||
|
this.loadAssessedForms.next('1');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// detect chnges from parent
|
||||||
|
ngOnChanges(changes: SimpleChanges) {
|
||||||
|
if(changes.parentData.currentValue.length>0){
|
||||||
|
this.grossProfitForm = this._fb.group(
|
||||||
|
{
|
||||||
|
calc_type_id:[changes.parentData.currentValue[0].calc_type_id],
|
||||||
|
fk_pd_id:[this.masterData.pdid],
|
||||||
|
mode:[changes.parentData.currentValue[0].mode,Validators.compose([Validators.required])],
|
||||||
|
margin:[changes.parentData.currentValue[0].margin],
|
||||||
|
})
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.grossProfitForm = this._fb.group(
|
||||||
|
{
|
||||||
|
calc_type_id:[''],
|
||||||
|
fk_pd_id:[this.masterData.pdid],
|
||||||
|
mode:['',Validators.compose([Validators.required])],
|
||||||
|
margin:[''],
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// validate all form group and form array fields
|
||||||
|
validateAllFormFields(formGroup: any) {
|
||||||
|
Object.keys(formGroup.controls).forEach(field => {
|
||||||
|
const control = formGroup.get(field);
|
||||||
|
if (control instanceof FormControl) {
|
||||||
|
control.markAsTouched({ onlySelf: true });
|
||||||
|
} else if (control instanceof FormGroup) {
|
||||||
|
this.validateAllFormFields(control);
|
||||||
|
} else if (control instanceof FormArray) {
|
||||||
|
this.validateAllFormFields(control);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,57 @@
|
|||||||
|
<mat-card>
|
||||||
|
<mat-card-content>
|
||||||
|
<div fxLayout="row nowrap">
|
||||||
|
<div fxFlex="60" align="left">
|
||||||
|
<span>House Hold Items</span>
|
||||||
|
</div>
|
||||||
|
<div fxFlex="40" align="right">
|
||||||
|
<button type="button" mat-flat-button (click)="addMoreItem()"
|
||||||
|
matTooltip="Add More" matTooltipPosition="above" color="primary">
|
||||||
|
<strong>Add More Item</strong>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="example-container mat-elevation-z8">
|
||||||
|
<table mat-table [dataSource]="houseItemSource">
|
||||||
|
|
||||||
|
<ng-container matColumnDef="buiness_particulars" sticky>
|
||||||
|
<th mat-header-cell *matHeaderCellDef> Expense Particulars </th>
|
||||||
|
<td mat-cell *matCellDef="let element"> {{element.expense_item}} </td>
|
||||||
|
</ng-container>
|
||||||
|
|
||||||
|
<ng-container matColumnDef="expense_value">
|
||||||
|
<th mat-header-cell *matHeaderCellDef> Amount (Rs) </th>
|
||||||
|
<td mat-cell *matCellDef="let element"> {{element.expense_value}} </td>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="frequency">
|
||||||
|
<th mat-header-cell *matHeaderCellDef> Frequency </th>
|
||||||
|
<td mat-cell *matCellDef="let element">{{element.frequency_name}}
|
||||||
|
</td>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="annual_expenses">
|
||||||
|
<th mat-header-cell *matHeaderCellDef> Annual Expenses </th>
|
||||||
|
<td mat-cell *matCellDef="let element">{{element.annual_expense_value}}
|
||||||
|
</td>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="action" stickyEnd>
|
||||||
|
<th mat-header-cell *matHeaderCellDef></th>
|
||||||
|
<td mat-cell *matCellDef="let element">
|
||||||
|
<button mat-mini-fab class="mr-1 mb-1" matTooltip="Edit" matTooltipPosition="left" (click)="editHouseItem(element)" color="primary">
|
||||||
|
<mat-icon>edit</mat-icon>
|
||||||
|
</button>
|
||||||
|
<button class="mr-1 mb-1" mat-mini-fab matTooltip="Remove" matTooltipPosition="above" (click)="removeHouseItem(element)" color="primary" type="button">
|
||||||
|
<mat-icon>delete</mat-icon>
|
||||||
|
</button>
|
||||||
|
</td>
|
||||||
|
</ng-container>
|
||||||
|
|
||||||
|
<tr mat-header-row *matHeaderRowDef="displayedColumns; sticky:true"></tr>
|
||||||
|
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</mat-card-content>
|
||||||
|
</mat-card>
|
||||||
|
<notifier-container></notifier-container>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -0,0 +1,30 @@
|
|||||||
|
.example-container {
|
||||||
|
max-height: 280px;
|
||||||
|
width: 100%;
|
||||||
|
overflow: auto;
|
||||||
|
margin-top: 2%;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
td{
|
||||||
|
padding-right: 2%;
|
||||||
|
padding-left: 2%;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
th {
|
||||||
|
padding-left: 2%;
|
||||||
|
padding-right: 2%;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mat-table-sticky:first-child {
|
||||||
|
border-right: 1px solid #e0e0e0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mat-table-sticky:last-child {
|
||||||
|
border-left: 1px solid #e0e0e0;
|
||||||
|
}
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { HouseHoldDetailsComponent } from './house-hold-details.component';
|
||||||
|
|
||||||
|
describe('HouseHoldDetailsComponent', () => {
|
||||||
|
let component: HouseHoldDetailsComponent;
|
||||||
|
let fixture: ComponentFixture<HouseHoldDetailsComponent>;
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
declarations: [ HouseHoldDetailsComponent ]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
fixture = TestBed.createComponent(HouseHoldDetailsComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
@ -0,0 +1,90 @@
|
|||||||
|
import { Component, OnInit, Input, Output, Inject, OnChanges,SimpleChanges, EventEmitter } from '@angular/core';
|
||||||
|
import { PdTrigerService } from './../../../../../../pd-service/pd-triger.service';
|
||||||
|
import {MatDialog,MatDialogRef,MAT_DIALOG_DATA, MatTableDataSource} from '@angular/material';
|
||||||
|
import { ManageHouseHoldComponent } from './../AI-diologue/manage-house-hold/manage-house-hold.component';
|
||||||
|
import { NotifierService } from 'angular-notifier';
|
||||||
|
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-house-hold-details',
|
||||||
|
templateUrl: './house-hold-details.component.html',
|
||||||
|
styleUrls: ['./house-hold-details.component.scss']
|
||||||
|
})
|
||||||
|
export class HouseHoldDetailsComponent implements OnInit {
|
||||||
|
|
||||||
|
displayedColumns = ['buiness_particulars','expense_value','frequency','annual_expenses','action'];
|
||||||
|
public houseItemSource= new MatTableDataSource();
|
||||||
|
@Input() parentData: any;
|
||||||
|
@Input() masterData: { UOMList: any; frequencyList: any;businessExpenseList:any; pdid:number};
|
||||||
|
@Output() loadAssessedForms = new EventEmitter<string>();
|
||||||
|
private notifier: NotifierService;
|
||||||
|
constructor(notifier: NotifierService,private _pd: PdTrigerService, private dialog: MatDialog) {
|
||||||
|
this.notifier= notifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
}
|
||||||
|
|
||||||
|
// add more item details
|
||||||
|
addMoreItem():void {
|
||||||
|
let passValues: any = {
|
||||||
|
manage_status:1,
|
||||||
|
masterData: this.masterData
|
||||||
|
}
|
||||||
|
const dialogRef = this.dialog.open(ManageHouseHoldComponent, {
|
||||||
|
data: passValues,
|
||||||
|
position: { right: '0'},
|
||||||
|
width:'80%',
|
||||||
|
disableClose: true
|
||||||
|
});
|
||||||
|
dialogRef.afterClosed()
|
||||||
|
.subscribe(dataresult => {
|
||||||
|
if(dataresult.update_status==true){
|
||||||
|
this.loadAssessedForms.next('1');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
editHouseItem(value:any) {
|
||||||
|
let passValues: any = {
|
||||||
|
manage_status:2,
|
||||||
|
masterData: this.masterData,
|
||||||
|
editData:value
|
||||||
|
}
|
||||||
|
const dialogRef = this.dialog.open(ManageHouseHoldComponent, {
|
||||||
|
data: passValues,
|
||||||
|
position: { right: '0'},
|
||||||
|
width:'80%',
|
||||||
|
disableClose: true
|
||||||
|
});
|
||||||
|
dialogRef.afterClosed()
|
||||||
|
.subscribe(dataresult => {
|
||||||
|
if(dataresult.update_status==true){
|
||||||
|
this.loadAssessedForms.next('1');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// remove house item
|
||||||
|
removeHouseItem(value: any) : void{
|
||||||
|
|
||||||
|
let deleteRecords: any =[{
|
||||||
|
"fk_pd_id":this.masterData.pdid,
|
||||||
|
"household_expense_id":value.household_expense_id,
|
||||||
|
"isactive":false,
|
||||||
|
}];
|
||||||
|
this._pd.saveAssessedDetails('saveAssessedIncomeHouseholdExpenses',deleteRecords).subscribe(data => {
|
||||||
|
this.notifier.notify('success','Removed Successfully');
|
||||||
|
this.loadAssessedForms.next('1');
|
||||||
|
}, error => {
|
||||||
|
this.notifier.notify('warning', 'Something Wents Wrong Try Again.!');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// detect chnges from parent
|
||||||
|
ngOnChanges(changes: SimpleChanges) {
|
||||||
|
this.houseItemSource.data = changes.parentData.currentValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,55 @@
|
|||||||
|
<mat-card>
|
||||||
|
<mat-card-content>
|
||||||
|
<div fxLayout="row nowrap">
|
||||||
|
<div fxFlex="60" align="left">
|
||||||
|
<span>Other Business Income Items</span>
|
||||||
|
</div>
|
||||||
|
<div fxFlex="40" align="right">
|
||||||
|
<button type="button" mat-flat-button (click)="addMoreItem()"
|
||||||
|
matTooltip="Add More" matTooltipPosition="above" color="primary">
|
||||||
|
<strong>Add More Item</strong>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="example-container mat-elevation-z8">
|
||||||
|
<table mat-table [dataSource]="businessIncomeItemSource">
|
||||||
|
|
||||||
|
<ng-container matColumnDef="buiness_income" sticky>
|
||||||
|
<th mat-header-cell *matHeaderCellDef> Buiness Income </th>
|
||||||
|
<td mat-cell *matCellDef="let element"> {{element.business_income_item}} </td>
|
||||||
|
</ng-container>
|
||||||
|
|
||||||
|
<ng-container matColumnDef="income_value">
|
||||||
|
<th mat-header-cell *matHeaderCellDef> Amount (Rs) </th>
|
||||||
|
<td mat-cell *matCellDef="let element"> {{element.income_value}} </td>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="frequency">
|
||||||
|
<th mat-header-cell *matHeaderCellDef> Frequency </th>
|
||||||
|
<td mat-cell *matCellDef="let element">{{element.frequency_name}}
|
||||||
|
</td>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="annual_income">
|
||||||
|
<th mat-header-cell *matHeaderCellDef> Annual Income </th>
|
||||||
|
<td mat-cell *matCellDef="let element">{{element.annual_income_value}}
|
||||||
|
</td>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="action" stickyEnd>
|
||||||
|
<th mat-header-cell *matHeaderCellDef></th>
|
||||||
|
<td mat-cell *matCellDef="let element">
|
||||||
|
<button mat-mini-fab matTooltip="Edit" class="mr-1 mb-1" matTooltipPosition="left" (click)="editIncomeItem(element)" color="primary">
|
||||||
|
<mat-icon>edit</mat-icon>
|
||||||
|
</button>
|
||||||
|
<button class="mr-1 mb-1" mat-mini-fab matTooltip="Remove" matTooltipPosition="above" (click)="removeIncomeItem(element)" color="primary" type="button">
|
||||||
|
<mat-icon>delete</mat-icon>
|
||||||
|
</button>
|
||||||
|
</td>
|
||||||
|
</ng-container>
|
||||||
|
|
||||||
|
<tr mat-header-row *matHeaderRowDef="displayedColumns; sticky:true"></tr>
|
||||||
|
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</mat-card-content>
|
||||||
|
</mat-card>
|
||||||
|
<notifier-container></notifier-container>
|
||||||
|
|
||||||
@ -0,0 +1,30 @@
|
|||||||
|
.example-container {
|
||||||
|
max-height: 280px;
|
||||||
|
width: 100%;
|
||||||
|
overflow: auto;
|
||||||
|
margin-top: 2%;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
td{
|
||||||
|
padding-right: 2%;
|
||||||
|
padding-left: 2%;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
th {
|
||||||
|
padding-left: 2%;
|
||||||
|
padding-right: 2%;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mat-table-sticky:first-child {
|
||||||
|
border-right: 1px solid #e0e0e0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mat-table-sticky:last-child {
|
||||||
|
border-left: 1px solid #e0e0e0;
|
||||||
|
}
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { OtherBusinessIncomeDetailsComponent } from './other-business-income-details.component';
|
||||||
|
|
||||||
|
describe('OtherBusinessIncomeDetailsComponent', () => {
|
||||||
|
let component: OtherBusinessIncomeDetailsComponent;
|
||||||
|
let fixture: ComponentFixture<OtherBusinessIncomeDetailsComponent>;
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
declarations: [ OtherBusinessIncomeDetailsComponent ]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
fixture = TestBed.createComponent(OtherBusinessIncomeDetailsComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
@ -0,0 +1,87 @@
|
|||||||
|
import { Component, OnInit, Input, Output, Inject, OnChanges,SimpleChanges, EventEmitter } from '@angular/core';
|
||||||
|
import { PdTrigerService } from './../../../../../../pd-service/pd-triger.service';
|
||||||
|
import {MatDialog,MatDialogRef,MAT_DIALOG_DATA, MatTableDataSource} from '@angular/material';
|
||||||
|
import { ManageOtherBusinessIncomeComponent } from './../AI-diologue/manage-other-business-income/manage-other-business-income.component';
|
||||||
|
import { NotifierService } from 'angular-notifier';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-other-business-income-details',
|
||||||
|
templateUrl: './other-business-income-details.component.html',
|
||||||
|
styleUrls: ['./other-business-income-details.component.scss']
|
||||||
|
})
|
||||||
|
export class OtherBusinessIncomeDetailsComponent implements OnInit {
|
||||||
|
|
||||||
|
displayedColumns = ['buiness_income','income_value','frequency','annual_income','action'];
|
||||||
|
public businessIncomeItemSource= new MatTableDataSource();
|
||||||
|
@Input() parentData: any;
|
||||||
|
@Input() masterData: { UOMList: any; frequencyList: any;businessExpenseList:any; pdid:number};
|
||||||
|
@Output() loadAssessedForms = new EventEmitter<string>();
|
||||||
|
private notifier: NotifierService;
|
||||||
|
constructor(notifier: NotifierService, private _pd: PdTrigerService, private dialog: MatDialog) {
|
||||||
|
this.notifier=notifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
}
|
||||||
|
|
||||||
|
// add more item details
|
||||||
|
addMoreItem():void {
|
||||||
|
let passValues: any = {
|
||||||
|
manage_status:1,
|
||||||
|
masterData: this.masterData
|
||||||
|
}
|
||||||
|
const dialogRef = this.dialog.open(ManageOtherBusinessIncomeComponent, {
|
||||||
|
data: passValues,
|
||||||
|
position: { right: '0'},
|
||||||
|
width:'80%',
|
||||||
|
disableClose: true
|
||||||
|
});
|
||||||
|
dialogRef.afterClosed()
|
||||||
|
.subscribe(dataresult => {
|
||||||
|
if(dataresult.update_status==true){
|
||||||
|
this.loadAssessedForms.next('1');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
editIncomeItem(value:any) {
|
||||||
|
let passValues: any = {
|
||||||
|
manage_status:2,
|
||||||
|
masterData: this.masterData,
|
||||||
|
editData:value
|
||||||
|
}
|
||||||
|
const dialogRef = this.dialog.open(ManageOtherBusinessIncomeComponent, {
|
||||||
|
data: passValues,
|
||||||
|
position: { right: '0'},
|
||||||
|
width:'80%',
|
||||||
|
disableClose: true
|
||||||
|
});
|
||||||
|
dialogRef.afterClosed()
|
||||||
|
.subscribe(dataresult => {
|
||||||
|
if(dataresult.update_status==true){
|
||||||
|
this.loadAssessedForms.next('1');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// remove income item
|
||||||
|
removeIncomeItem(value: any) : void{
|
||||||
|
|
||||||
|
let deleteRecords: any =[{
|
||||||
|
"fk_pd_id":this.masterData.pdid,
|
||||||
|
"pd_business_income_id":value.pd_business_income_id,
|
||||||
|
"isactive":false,
|
||||||
|
}];
|
||||||
|
this._pd.saveAssessedDetails('saveOtherBusinessIncome',deleteRecords).subscribe(data => {
|
||||||
|
this.notifier.notify('success','Removed Successfully');
|
||||||
|
this.loadAssessedForms.next('1');
|
||||||
|
}, error => {
|
||||||
|
this.notifier.notify('warning', 'Something Wents Wrong Try Again.!');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// detect chnges from parent
|
||||||
|
ngOnChanges(changes: SimpleChanges) {
|
||||||
|
this.businessIncomeItemSource.data = changes.parentData.currentValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,68 @@
|
|||||||
|
<mat-card >
|
||||||
|
<mat-card-content *ngIf="activateMariginCalculation;else notAvilable">
|
||||||
|
<div fxLayout="row nowrap">
|
||||||
|
<div fxFlex="60" align="left">
|
||||||
|
<span>Purchase Item</span>
|
||||||
|
</div>
|
||||||
|
<div fxFlex="40" align="right">
|
||||||
|
<button type="button" mat-flat-button (click)="addMoreItem()"
|
||||||
|
matTooltip="Add More" matTooltipPosition="above" color="primary">
|
||||||
|
<strong>Add More Item</strong>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="example-container mat-elevation-z8">
|
||||||
|
<table mat-table [dataSource]="purchaseItemSource">
|
||||||
|
|
||||||
|
<ng-container matColumnDef="raw_material" sticky>
|
||||||
|
<th mat-header-cell *matHeaderCellDef> Raw Material/Trading Item </th>
|
||||||
|
<td mat-cell *matCellDef="let element"> {{element.purchase_item}} </td>
|
||||||
|
</ng-container>
|
||||||
|
|
||||||
|
<ng-container matColumnDef="purchase_quantity">
|
||||||
|
<th mat-header-cell *matHeaderCellDef> Purchase Quantity </th>
|
||||||
|
<td mat-cell *matCellDef="let element"> {{element.purchase_qty}} </td>
|
||||||
|
</ng-container>
|
||||||
|
|
||||||
|
<ng-container matColumnDef="UOM">
|
||||||
|
<th mat-header-cell *matHeaderCellDef> UOM </th>
|
||||||
|
<td mat-cell *matCellDef="let element"> {{element.uom_name}} </td>
|
||||||
|
</ng-container>
|
||||||
|
|
||||||
|
<ng-container matColumnDef="rate_per_unit_purchase">
|
||||||
|
<th mat-header-cell *matHeaderCellDef> Rate/Unit of Purchase </th>
|
||||||
|
<td mat-cell *matCellDef="let element"> {{element.rate_per_unit}} </td>
|
||||||
|
</ng-container>
|
||||||
|
|
||||||
|
<ng-container matColumnDef="frequency">
|
||||||
|
<th mat-header-cell *matHeaderCellDef> Frequency </th>
|
||||||
|
<td mat-cell *matCellDef="let element">{{element.frequency_name}}
|
||||||
|
</td>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="annual_purchase">
|
||||||
|
<th mat-header-cell *matHeaderCellDef> Annual Purchase </th>
|
||||||
|
<td mat-cell *matCellDef="let element">{{element.annual_purchase_value}}
|
||||||
|
</td>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="action" stickyEnd>
|
||||||
|
<th mat-header-cell *matHeaderCellDef></th>
|
||||||
|
<td mat-cell *matCellDef="let element">
|
||||||
|
<button mat-mini-fab matTooltip="Edit" class="mr-1 mb-1" matTooltipPosition="left" (click)="editPurchaseItem(element)" color="primary">
|
||||||
|
<mat-icon>edit</mat-icon>
|
||||||
|
</button>
|
||||||
|
<button class="mr-1 mb-1" mat-mini-fab matTooltip="Remove" matTooltipPosition="above" (click)="removePurchaseItem(element)" color="primary" type="button">
|
||||||
|
<mat-icon>delete</mat-icon>
|
||||||
|
</button>
|
||||||
|
</td>
|
||||||
|
</ng-container>
|
||||||
|
|
||||||
|
<tr mat-header-row *matHeaderRowDef="displayedColumns; sticky:true"></tr>
|
||||||
|
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</mat-card-content>
|
||||||
|
<ng-template #notAvilable>
|
||||||
|
<strong>Purchase Item is Not Available.. </strong>
|
||||||
|
</ng-template>
|
||||||
|
</mat-card>
|
||||||
|
<notifier-container></notifier-container>
|
||||||
@ -0,0 +1,30 @@
|
|||||||
|
.example-container {
|
||||||
|
max-height: 280px;
|
||||||
|
width: 100%;
|
||||||
|
overflow: auto;
|
||||||
|
margin-top: 2%;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
td{
|
||||||
|
padding-right: 2%;
|
||||||
|
padding-left: 2%;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
th {
|
||||||
|
padding-left: 2%;
|
||||||
|
padding-right: 2%;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mat-table-sticky:first-child {
|
||||||
|
border-right: 1px solid #e0e0e0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mat-table-sticky:last-child {
|
||||||
|
border-left: 1px solid #e0e0e0;
|
||||||
|
}
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { PurchaseDetailsComponent } from './purchase-details.component';
|
||||||
|
|
||||||
|
describe('PurchaseDetailsComponent', () => {
|
||||||
|
let component: PurchaseDetailsComponent;
|
||||||
|
let fixture: ComponentFixture<PurchaseDetailsComponent>;
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
declarations: [ PurchaseDetailsComponent ]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
fixture = TestBed.createComponent(PurchaseDetailsComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
@ -0,0 +1,100 @@
|
|||||||
|
import { Component, OnInit, Input, Output, Inject, DoCheck, EventEmitter } from '@angular/core';
|
||||||
|
import { PdTrigerService } from './../../../../../../pd-service/pd-triger.service';
|
||||||
|
import {MatDialog,MatDialogRef,MAT_DIALOG_DATA, MatTableDataSource} from '@angular/material';
|
||||||
|
import { ManagePurchaseComponent } from './../AI-diologue/manage-purchase/manage-purchase.component';
|
||||||
|
import { NotifierService } from 'angular-notifier';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-purchase-details',
|
||||||
|
templateUrl: './purchase-details.component.html',
|
||||||
|
styleUrls: ['./purchase-details.component.scss']
|
||||||
|
})
|
||||||
|
export class PurchaseDetailsComponent implements OnInit, DoCheck {
|
||||||
|
displayedColumns = ['raw_material','purchase_quantity','UOM','rate_per_unit_purchase','frequency','annual_purchase','action'];
|
||||||
|
public purchaseItemSource= new MatTableDataSource();
|
||||||
|
activateMariginCalculation:boolean;
|
||||||
|
private notifier: NotifierService;
|
||||||
|
@Input() parentData: any;
|
||||||
|
@Input() masterData: { UOMList: any; frequencyList: any;businessExpenseList:any,businessIncomeList: any, pdid:number, grossProfitTypeList:any};
|
||||||
|
@Output() loadAssessedForms = new EventEmitter<string>();
|
||||||
|
constructor(notifier: NotifierService,private _pd: PdTrigerService, private dialog: MatDialog) {
|
||||||
|
this.activateMariginCalculation=false;
|
||||||
|
this.notifier = notifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
}
|
||||||
|
|
||||||
|
// add more item details
|
||||||
|
addMoreItem():void {
|
||||||
|
let passValues: any = {
|
||||||
|
manage_status:1,
|
||||||
|
masterData: this.masterData
|
||||||
|
}
|
||||||
|
const dialogRef = this.dialog.open(ManagePurchaseComponent, {
|
||||||
|
data: passValues,
|
||||||
|
position: { right: '0'},
|
||||||
|
width:'80%',
|
||||||
|
disableClose: true
|
||||||
|
});
|
||||||
|
dialogRef.afterClosed()
|
||||||
|
.subscribe(dataresult => {
|
||||||
|
if(dataresult.update_status==true){
|
||||||
|
this.loadAssessedForms.next('1');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
editPurchaseItem(value:any) {
|
||||||
|
let passValues: any = {
|
||||||
|
manage_status:2,
|
||||||
|
masterData: this.masterData,
|
||||||
|
editData:value
|
||||||
|
}
|
||||||
|
const dialogRef = this.dialog.open(ManagePurchaseComponent, {
|
||||||
|
data: passValues,
|
||||||
|
position: { right: '0'},
|
||||||
|
width:'80%',
|
||||||
|
disableClose: true
|
||||||
|
});
|
||||||
|
dialogRef.afterClosed()
|
||||||
|
.subscribe(dataresult => {
|
||||||
|
if(dataresult.update_status==true){
|
||||||
|
this.loadAssessedForms.next('1');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// remove purchase item
|
||||||
|
removePurchaseItem(value: any) : void{
|
||||||
|
|
||||||
|
let deleteRecords: any =[{
|
||||||
|
"fk_pd_id":this.masterData.pdid,
|
||||||
|
"purchase_id":value.purchase_id,
|
||||||
|
"isactive":false,
|
||||||
|
}];
|
||||||
|
this._pd.saveAssessedDetails('saveAssessedIncomePurchaseDetails',deleteRecords).subscribe(data => {
|
||||||
|
this.notifier.notify('success','Removed Successfully');
|
||||||
|
this.loadAssessedForms.next('1');
|
||||||
|
}, error => {
|
||||||
|
this.notifier.notify('warning', 'Something Wents Wrong Try Again.!');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// do check component bases
|
||||||
|
ngDoCheck() {
|
||||||
|
if(this.masterData.grossProfitTypeList.length>0){
|
||||||
|
this.activateMariginCalculation = this.masterData.grossProfitTypeList[this.masterData.grossProfitTypeList.length-1].mode==1 ? true : false;
|
||||||
|
}
|
||||||
|
this.purchaseItemSource.data = this.parentData;
|
||||||
|
}
|
||||||
|
|
||||||
|
// detect chnges from parent
|
||||||
|
// ngOnChanges(changes: SimpleChanges) {
|
||||||
|
// if(changes.masterData){
|
||||||
|
// if(changes.masterData.currentValue.grossProfitTypeList.length>0){
|
||||||
|
// this.activateMariginCalculation = changes.masterData.currentValue.grossProfitTypeList[changes.masterData.currentValue.grossProfitTypeList.length-1].mode==1 ? true : false;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// this.purchaseItemSource.data = changes.parentData.currentValue;
|
||||||
|
// }
|
||||||
|
}
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
<form [formGroup]="salesCalculationForm" novalidate>
|
||||||
|
|
||||||
|
<mat-card>
|
||||||
|
<mat-card-header>
|
||||||
|
<mat-card-title>Sales Calculation</mat-card-title>
|
||||||
|
</mat-card-header>
|
||||||
|
<mat-card-content>
|
||||||
|
<mat-form-field style="width: 82%">
|
||||||
|
<input matInput OnlyNumber type="text" placeholder="Sales Declared by the Customer as the Annual Sales Actually Done" formControlName="sales_declared_by_customer" (keyup)="salesCalculation(salesCalculationForm.value)" required>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width: 40%" *ngIf="activateMariginCalculation">
|
||||||
|
<input matInput OnlyNumber type="text" placeholder="Margin Percentage %" formControlName="margin_per" (keyup)="salesCalculation(salesCalculationForm.value)" required>
|
||||||
|
</mat-form-field>
|
||||||
|
<mat-form-field style="width: 40%" *ngIf="activateMariginCalculation">
|
||||||
|
<input matInput OnlyNumber type="text" placeholder="Margin Value" formControlName="margin_value" readonly>
|
||||||
|
</mat-form-field>
|
||||||
|
<button type="submit" class="mr-1 mb-1 hover-icon" mat-raised-button mat-icon-button matTooltip="Save" matTooltipPosition="above" (click)="submitDetails(salesCalculationForm.value)"><mat-icon>save</mat-icon>
|
||||||
|
</button>
|
||||||
|
</mat-card-content>
|
||||||
|
</mat-card>
|
||||||
|
</form>
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
mat-form-field {
|
||||||
|
margin: 0 2%;
|
||||||
|
}
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { SalesCalculationComponent } from './sales-calculation.component';
|
||||||
|
|
||||||
|
describe('SalesCalculationComponent', () => {
|
||||||
|
let component: SalesCalculationComponent;
|
||||||
|
let fixture: ComponentFixture<SalesCalculationComponent>;
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
declarations: [ SalesCalculationComponent ]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
fixture = TestBed.createComponent(SalesCalculationComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
@ -0,0 +1,102 @@
|
|||||||
|
import { Component, OnInit, Input, Output, Inject, EventEmitter, DoCheck, OnChanges, SimpleChanges } from '@angular/core';
|
||||||
|
import { FormBuilder, FormGroup, Validators, FormControl, FormArray } from '@angular/forms';
|
||||||
|
import { PdTrigerService } from './../../../../../../pd-service/pd-triger.service';
|
||||||
|
import { NotifierService } from 'angular-notifier';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-sales-calculation',
|
||||||
|
templateUrl: './sales-calculation.component.html',
|
||||||
|
styleUrls: ['./sales-calculation.component.scss']
|
||||||
|
})
|
||||||
|
export class SalesCalculationComponent implements OnInit, OnChanges, DoCheck {
|
||||||
|
@Input() parentData: any;
|
||||||
|
@Input() masterData: { pdid:number,grossProfitTypeList:any};
|
||||||
|
@Output() loadAssessedForms = new EventEmitter<string>();
|
||||||
|
salesCalculationForm:FormGroup;
|
||||||
|
activateMariginCalculation: boolean;
|
||||||
|
private notifier: NotifierService;
|
||||||
|
constructor(notifier:NotifierService,private _fb: FormBuilder, private _pd: PdTrigerService) {
|
||||||
|
this.activateMariginCalculation=false;
|
||||||
|
this.notifier = notifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
}
|
||||||
|
salesCalculation(values): void {
|
||||||
|
if(values.margin_per !='' && values.sales_declared_by_customer !='')
|
||||||
|
{
|
||||||
|
this.salesCalculationForm.controls['margin_value'].setValue(values.sales_declared_by_customer * (values.margin_per/100));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// save sales calculations details
|
||||||
|
submitDetails(records) {
|
||||||
|
if (this.salesCalculationForm.invalid) {
|
||||||
|
this.validateAllFormFields(this.salesCalculationForm);
|
||||||
|
this.notifier.notify('warning',"Please Check All Manatory Fields..");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this._pd.saveAssessedDetails('saveAssessedIncomeSalesDeclaredByCustomer',records).subscribe(data => {
|
||||||
|
this.notifier.notify('success', 'Saved Successfully.');
|
||||||
|
this.loadAssessedForms.next('1');
|
||||||
|
}, error => {
|
||||||
|
this.notifier.notify('warning', 'Something Wents Wrong Try Again.!');
|
||||||
|
this.loadAssessedForms.next('1');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// validate all form group and form array fields
|
||||||
|
validateAllFormFields(formGroup: any) {
|
||||||
|
Object.keys(formGroup.controls).forEach(field => {
|
||||||
|
const control = formGroup.get(field);
|
||||||
|
if (control instanceof FormControl) {
|
||||||
|
control.markAsTouched({ onlySelf: true });
|
||||||
|
} else if (control instanceof FormGroup) {
|
||||||
|
this.validateAllFormFields(control);
|
||||||
|
} else if (control instanceof FormArray) {
|
||||||
|
this.validateAllFormFields(control);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// do check component bases
|
||||||
|
ngDoCheck() {
|
||||||
|
|
||||||
|
if(this.masterData.grossProfitTypeList.length>0){
|
||||||
|
this.activateMariginCalculation = this.masterData.grossProfitTypeList[this.masterData.grossProfitTypeList.length-1].margin==2 && this.masterData.grossProfitTypeList[this.masterData.grossProfitTypeList.length-1].mode==2 ? true : false;
|
||||||
|
}
|
||||||
|
this.activateMariginCalculation===true ? this.salesCalculationForm.controls['margin_per'].setValidators([Validators.required]) : this.salesCalculationForm.controls['margin_per'].clearValidators();
|
||||||
|
this.salesCalculationForm.controls['margin_per'].updateValueAndValidity();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//detect chnges from parent
|
||||||
|
ngOnChanges(changes: SimpleChanges) {
|
||||||
|
if(changes.masterData){
|
||||||
|
if(changes.masterData.currentValue.grossProfitTypeList.length>0){
|
||||||
|
this.activateMariginCalculation = changes.masterData.currentValue.grossProfitTypeList[changes.masterData.currentValue.grossProfitTypeList.length-1].margin==2 && changes.masterData.currentValue.grossProfitTypeList[changes.masterData.currentValue.grossProfitTypeList.length-1].mode==2 ? true : false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(changes.parentData){
|
||||||
|
if(changes.parentData.currentValue.length>0){
|
||||||
|
this.salesCalculationForm = this._fb.group({
|
||||||
|
sdc_id:[changes.parentData.currentValue[changes.parentData.currentValue.length-1].sdc_id],
|
||||||
|
sales_declared_by_customer:[changes.parentData.currentValue[changes.parentData.currentValue.length-1].sales_declared_by_customer, Validators.compose([Validators.required])],
|
||||||
|
fk_pd_id:[this.masterData.pdid],
|
||||||
|
margin_per:[this.activateMariginCalculation===false ? '' : changes.parentData.currentValue[changes.parentData.currentValue.length-1].margin_per,this.activateMariginCalculation===true ? Validators.required: Validators.nullValidator],
|
||||||
|
margin_value:[this.activateMariginCalculation==false ? '' : changes.parentData.currentValue[changes.parentData.currentValue.length-1].margin_value],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.salesCalculationForm = this._fb.group({
|
||||||
|
sdc_id:[''],
|
||||||
|
sales_declared_by_customer:['', Validators.required],
|
||||||
|
fk_pd_id:[this.masterData.pdid],
|
||||||
|
margin_per:['',this.activateMariginCalculation===true ? Validators.required: Validators.nullValidator],
|
||||||
|
margin_value:[''],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,86 @@
|
|||||||
|
<mat-card>
|
||||||
|
<!-- <mat-card-header>
|
||||||
|
<mat-card-title>Sales Calculate Item Wise</mat-card-title>
|
||||||
|
</mat-card-header> -->
|
||||||
|
<mat-card-content>
|
||||||
|
<div fxLayout="row nowrap">
|
||||||
|
<div fxFlex="60" align="left">
|
||||||
|
<span>Sales Calculate Item Wise</span>
|
||||||
|
</div>
|
||||||
|
<div fxFlex="40" align="right">
|
||||||
|
<button type="button" mat-flat-button (click)="addMoreItem()"
|
||||||
|
matTooltip="Add More" matTooltipPosition="above" color="primary">
|
||||||
|
<strong>Add More Item</strong>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="example-container mat-elevation-z8">
|
||||||
|
<table mat-table [dataSource]="salesItemSource">
|
||||||
|
|
||||||
|
<ng-container matColumnDef="product_services" sticky>
|
||||||
|
<th mat-header-cell *matHeaderCellDef> Product/Services </th>
|
||||||
|
<td mat-cell *matCellDef="let element"> {{element.sales_item}} </td>
|
||||||
|
</ng-container>
|
||||||
|
|
||||||
|
<ng-container matColumnDef="sale_quantity">
|
||||||
|
<th mat-header-cell *matHeaderCellDef> Sale Quantity </th>
|
||||||
|
<td mat-cell *matCellDef="let element"> {{element.sales_qty}} </td>
|
||||||
|
</ng-container>
|
||||||
|
|
||||||
|
<ng-container matColumnDef="UOM">
|
||||||
|
<th mat-header-cell *matHeaderCellDef> UOM </th>
|
||||||
|
<td mat-cell *matCellDef="let element"> {{element.uom_name}} </td>
|
||||||
|
</ng-container>
|
||||||
|
|
||||||
|
<ng-container matColumnDef="rate_per_unit_sale">
|
||||||
|
<th mat-header-cell *matHeaderCellDef> Rate/Unit of Sale </th>
|
||||||
|
<td mat-cell *matCellDef="let element"> {{element.rate_per_unit}} </td>
|
||||||
|
</ng-container>
|
||||||
|
|
||||||
|
<ng-container matColumnDef="frequency">
|
||||||
|
<th mat-header-cell *matHeaderCellDef> Frequency </th>
|
||||||
|
<td mat-cell *matCellDef="let element">{{element.frequency_name}}
|
||||||
|
</td>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="annual_sales">
|
||||||
|
<th mat-header-cell *matHeaderCellDef> Annual Sales </th>
|
||||||
|
<td mat-cell *matCellDef="let element">{{element.annual_sale_value}}
|
||||||
|
</td>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="margin_percentage" *ngIf="activateMariginCalculation===true">
|
||||||
|
<th mat-header-cell *matHeaderCellDef> Margin Percentage % </th>
|
||||||
|
<td mat-cell *matCellDef="let element">{{element.margin_per}}
|
||||||
|
</td>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="margin_amount" *ngIf="activateMariginCalculation===true">
|
||||||
|
<th mat-header-cell *matHeaderCellDef> Margin Amount </th>
|
||||||
|
<td mat-cell *matCellDef="let element">{{element.margin_per_uom}}
|
||||||
|
</td>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="final_value" *ngIf="activateMariginCalculation===true">
|
||||||
|
<th mat-header-cell *matHeaderCellDef> Final Value </th>
|
||||||
|
<td mat-cell *matCellDef="let element">{{element.margin_final_value}}
|
||||||
|
</td>
|
||||||
|
</ng-container>
|
||||||
|
|
||||||
|
|
||||||
|
<ng-container matColumnDef="action" stickyEnd>
|
||||||
|
<th mat-header-cell *matHeaderCellDef></th>
|
||||||
|
<td mat-cell *matCellDef="let element">
|
||||||
|
<button mat-mini-fab matTooltip="Edit" class="mr-1 mb-1" matTooltipPosition="left" (click)="editSalesItem(element)" color="primary">
|
||||||
|
<mat-icon>edit</mat-icon>
|
||||||
|
</button>
|
||||||
|
<button class="mr-1 mb-1" mat-mini-fab matTooltip="Remove" matTooltipPosition="right" (click)="removeSalesItem(element)" color="primary" type="button">
|
||||||
|
<mat-icon>delete</mat-icon>
|
||||||
|
</button>
|
||||||
|
</td>
|
||||||
|
</ng-container>
|
||||||
|
|
||||||
|
<tr mat-header-row *matHeaderRowDef="displayedColumns; sticky:true"></tr>
|
||||||
|
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</mat-card-content>
|
||||||
|
|
||||||
|
</mat-card>
|
||||||
|
<notifier-container></notifier-container>
|
||||||
@ -0,0 +1,30 @@
|
|||||||
|
.example-container {
|
||||||
|
max-height: 300px;
|
||||||
|
width: 100%;
|
||||||
|
overflow: auto;
|
||||||
|
margin-top: 2%;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
td{
|
||||||
|
padding-right: 2%;
|
||||||
|
padding-left: 2%;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
th {
|
||||||
|
padding-left: 2%;
|
||||||
|
padding-right: 2%;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mat-table-sticky:first-child {
|
||||||
|
border-right: 1px solid #e0e0e0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mat-table-sticky:last-child {
|
||||||
|
border-left: 1px solid #e0e0e0;
|
||||||
|
}
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
|
|
||||||
|
import { SalesDetailsComponent } from './sales-details.component';
|
||||||
|
|
||||||
|
describe('SalesDetailsComponent', () => {
|
||||||
|
let component: SalesDetailsComponent;
|
||||||
|
let fixture: ComponentFixture<SalesDetailsComponent>;
|
||||||
|
|
||||||
|
beforeEach(async(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
declarations: [ SalesDetailsComponent ]
|
||||||
|
})
|
||||||
|
.compileComponents();
|
||||||
|
}));
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
fixture = TestBed.createComponent(SalesDetailsComponent);
|
||||||
|
component = fixture.componentInstance;
|
||||||
|
fixture.detectChanges();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should create', () => {
|
||||||
|
expect(component).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
@ -0,0 +1,119 @@
|
|||||||
|
import { Component, OnInit, Input, Output, Inject, OnChanges,SimpleChanges, EventEmitter, DoCheck } from '@angular/core';
|
||||||
|
import { PdTrigerService } from './../../../../../../pd-service/pd-triger.service';
|
||||||
|
import {MatDialog,MatDialogRef,MAT_DIALOG_DATA, MatTableDataSource} from '@angular/material';
|
||||||
|
import { ManageSalesComponent } from './../AI-diologue/manage-sales/manage-sales.component';
|
||||||
|
import { NotifierService } from 'angular-notifier';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-sales-details',
|
||||||
|
templateUrl: './sales-details.component.html',
|
||||||
|
styleUrls: ['./sales-details.component.scss']
|
||||||
|
})
|
||||||
|
export class SalesDetailsComponent implements OnInit, DoCheck {
|
||||||
|
displayedColumns = ['product_services','sale_quantity','UOM','rate_per_unit_sale','frequency','annual_sales','action'];
|
||||||
|
public salesItemSource= new MatTableDataSource();
|
||||||
|
@Input() parentData: any;
|
||||||
|
@Input() masterData: { UOMList: any; frequencyList: any;businessExpenseList:any,businessIncomeList: any, pdid:number, grossProfitTypeList:any};
|
||||||
|
@Output() loadAssessedForms = new EventEmitter<string>();
|
||||||
|
activateMariginCalculation: boolean;
|
||||||
|
private notifier :NotifierService
|
||||||
|
constructor(notifier:NotifierService, private _pd: PdTrigerService, private dialog: MatDialog) {
|
||||||
|
this.activateMariginCalculation=false;
|
||||||
|
this.notifier = notifier;
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
}
|
||||||
|
|
||||||
|
// add more item details
|
||||||
|
addMoreItem():void {
|
||||||
|
let passValues: any = {
|
||||||
|
manage_status:1,
|
||||||
|
masterData: this.masterData,
|
||||||
|
margin_calculation_status:this.activateMariginCalculation,
|
||||||
|
}
|
||||||
|
const dialogRef = this.dialog.open(ManageSalesComponent, {
|
||||||
|
data: passValues,
|
||||||
|
position: { right: '0'},
|
||||||
|
width:'80%',
|
||||||
|
disableClose: true
|
||||||
|
});
|
||||||
|
dialogRef.afterClosed()
|
||||||
|
.subscribe(dataresult => {
|
||||||
|
if(dataresult.update_status==true){
|
||||||
|
this.loadAssessedForms.next('1');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
editSalesItem(value:any) {
|
||||||
|
let passValues: any = {
|
||||||
|
manage_status:2,
|
||||||
|
masterData: this.masterData,
|
||||||
|
editData:value,
|
||||||
|
margin_calculation_status:this.activateMariginCalculation,
|
||||||
|
|
||||||
|
}
|
||||||
|
const dialogRef = this.dialog.open(ManageSalesComponent, {
|
||||||
|
data: passValues,
|
||||||
|
position: { right: '0'},
|
||||||
|
width:'80%',
|
||||||
|
disableClose: true
|
||||||
|
});
|
||||||
|
dialogRef.afterClosed()
|
||||||
|
.subscribe(dataresult => {
|
||||||
|
if(dataresult.update_status==true){
|
||||||
|
this.loadAssessedForms.next('1');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// remove sales item
|
||||||
|
removeSalesItem(value: any) : void{
|
||||||
|
|
||||||
|
let deleteRecords: any =[{
|
||||||
|
"fk_pd_id":this.masterData.pdid,
|
||||||
|
"sci_id":value.sci_id,
|
||||||
|
"isactive":false,
|
||||||
|
}];
|
||||||
|
this._pd.saveAssessedDetails('saveAssessedIncomeSalesCalculatedByItemwise',deleteRecords).subscribe(data => {
|
||||||
|
this.notifier.notify('success','Removed Successfully');
|
||||||
|
this.loadAssessedForms.next('1');
|
||||||
|
}, error => {
|
||||||
|
this.notifier.notify('warning', 'Something Wents Wrong Try Again.!');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// do check component bases
|
||||||
|
ngDoCheck() {
|
||||||
|
this.salesItemSource.data = this.parentData;
|
||||||
|
|
||||||
|
if(this.masterData.grossProfitTypeList.length>0){
|
||||||
|
this.activateMariginCalculation = this.masterData.grossProfitTypeList[this.masterData.grossProfitTypeList.length-1].margin==2 && this.masterData.grossProfitTypeList[this.masterData.grossProfitTypeList.length-1].mode==2 ? true : false;
|
||||||
|
if(this.activateMariginCalculation===true){
|
||||||
|
this.displayedColumns = ['product_services','sale_quantity','UOM','rate_per_unit_sale','frequency','annual_sales','margin_percentage','margin_amount','final_value','action'];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.displayedColumns = ['product_services','sale_quantity','UOM','rate_per_unit_sale','frequency','annual_sales','action'];
|
||||||
|
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
|
||||||
|
// detect chnges from parent
|
||||||
|
// ngOnChanges(changes: SimpleChanges) {
|
||||||
|
// this.salesItemSource.data = changes.parentData.currentValue;
|
||||||
|
// if(changes.masterData){
|
||||||
|
// if(changes.masterData.currentValue.grossProfitTypeList.length>0){
|
||||||
|
// this.activateMariginCalculation = changes.masterData.currentValue.grossProfitTypeList[changes.masterData.currentValue.grossProfitTypeList.length-1].margin==2 && changes.masterData.currentValue.grossProfitTypeList[changes.masterData.currentValue.grossProfitTypeList.length-1].mode==2 ? true : false;
|
||||||
|
// if(this.activateMariginCalculation===true){
|
||||||
|
// this.displayedColumns = ['product_services','sale_quantity','UOM','rate_per_unit_sale','frequency','annual_sales','margin_percentage','margin_amount','final_value','action'];
|
||||||
|
// }
|
||||||
|
// else {
|
||||||
|
// this.displayedColumns = ['product_services','sale_quantity','UOM','rate_per_unit_sale','frequency','annual_sales','action'];
|
||||||
|
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
}
|
||||||
@ -91,9 +91,23 @@ import { QcReviewComponent } from './list-pd/pd-report/qc-review/qc-review.compo
|
|||||||
import { SharedModule } from "app/shared/shared.module";
|
import { SharedModule } from "app/shared/shared.module";
|
||||||
import { BusinessInfoGroupComponent } from './list-pd/start-pd/forms/business-info-group/business-info-group.component';
|
import { BusinessInfoGroupComponent } from './list-pd/start-pd/forms/business-info-group/business-info-group.component';
|
||||||
import { SearchRelationPipe } from './../pd-pipes/search-relation.pipe';
|
import { SearchRelationPipe } from './../pd-pipes/search-relation.pipe';
|
||||||
|
import { DeleteRecordsCountPipe } from './../pd-pipes/delete-records-count.pipe';
|
||||||
import { BusinessAssetsInfoComponent } from './list-pd/start-pd/forms/business-assets-info/business-assets-info.component';
|
import { BusinessAssetsInfoComponent } from './list-pd/start-pd/forms/business-assets-info/business-assets-info.component';
|
||||||
import { BusinessBankingDetailsComponent } from './list-pd/start-pd/forms/business-banking-details/business-banking-details.component';
|
import { BusinessBankingDetailsComponent } from './list-pd/start-pd/forms/business-banking-details/business-banking-details.component';
|
||||||
|
import { SalesDetailsComponent } from './list-pd/start-pd/forms/assessed-income/sales-details/sales-details.component';
|
||||||
|
import { DailySalesDetailsComponent } from './list-pd/start-pd/forms/assessed-income/daily-sales-details/daily-sales-details.component';
|
||||||
|
import { SalesCalculationComponent } from './list-pd/start-pd/forms/assessed-income/sales-calculation/sales-calculation.component';
|
||||||
|
import { ManageSalesComponent } from './list-pd/start-pd/forms/assessed-income/AI-diologue/manage-sales/manage-sales.component';
|
||||||
|
import { PurchaseDetailsComponent } from './list-pd/start-pd/forms/assessed-income/purchase-details/purchase-details.component';
|
||||||
|
import { BusinessExpenseDetailsComponent } from './list-pd/start-pd/forms/assessed-income/business-expense-details/business-expense-details.component';
|
||||||
|
import { HouseHoldDetailsComponent } from './list-pd/start-pd/forms/assessed-income/house-hold-details/house-hold-details.component';
|
||||||
|
import { OtherBusinessIncomeDetailsComponent } from './list-pd/start-pd/forms/assessed-income/other-business-income-details/other-business-income-details.component';
|
||||||
|
import { ManagePurchaseComponent } from './list-pd/start-pd/forms/assessed-income/AI-diologue/manage-purchase/manage-purchase.component';
|
||||||
|
import { ManageBusinesExpenseComponent } from './list-pd/start-pd/forms/assessed-income/AI-diologue/manage-busines-expense/manage-busines-expense.component';
|
||||||
|
import { ManageHouseHoldComponent } from './list-pd/start-pd/forms/assessed-income/AI-diologue/manage-house-hold/manage-house-hold.component';
|
||||||
|
import { ManageOtherBusinessIncomeComponent } from './list-pd/start-pd/forms/assessed-income/AI-diologue/manage-other-business-income/manage-other-business-income.component';
|
||||||
|
import { GrossProfitCalculationComponent } from './list-pd/start-pd/forms/assessed-income/gross-profit-calculation/gross-profit-calculation.component';
|
||||||
|
import { ManageDailySalesComponent } from './list-pd/start-pd/forms/assessed-income/AI-diologue/manage-daily-sales/manage-daily-sales.component';
|
||||||
/**
|
/**
|
||||||
* Custom angular notifier options
|
* Custom angular notifier options
|
||||||
*/
|
*/
|
||||||
@ -270,7 +284,7 @@ const pdCustomNotifierOptions: NotifierOptions = {
|
|||||||
// AgmCoreModule.forRoot({apiKey: 'AIzaSyBtdO5k6CRntAMJCF-H5uZjTCoSGX95cdk'}), OwlDateTimeModule,
|
// AgmCoreModule.forRoot({apiKey: 'AIzaSyBtdO5k6CRntAMJCF-H5uZjTCoSGX95cdk'}), OwlDateTimeModule,
|
||||||
// OwlNativeDateTimeModule,
|
// OwlNativeDateTimeModule,
|
||||||
// ],
|
// ],
|
||||||
declarations: [RentalInfoComponent, TelePdAllocationComponent, FinancialInfoComponent, BusinessInfoComponent, EmploymentInfoComponent, StockComponent, BankingDetailsComponent, ListPdComponent, FamilyDetailsComponent, AddressComponent, ManagePdComponent, MapPdViewComponent, AddPdComponent, ViewPdComponent, PdAllocationComponent, SmartPdAllocationComponent, SchedulePdComponent, EditPdApplicantComponent, EditPdMasterComponent, StartPdComponent, InprogressPdComponent, AllPdComponent, ScheduledPdComponent, CompletedPdComponent, QcCompletedPdComponent, ClientInfoComponent, CurrentLoanComponent, AssetsInfoComponent, LoanDetailsComponent, OtherIncomeComponent, SupplierInfoComponent, PersonalInfoComponent, LenderRepresentativeComponent, PdReportComponent, AssessedIncomeComponent, AllocationViewMoreComponent, PdRequirementComponent, GeneralInfoComponent, ModelEditPdReportComponent, OtherApplicantDetailsComponent, NeighbourHoodComponent, DialogChangeCurrentVenrsion, FinalRemarksComponent, BusinessOtherFamilyMemberComponent, QcReviewComponent, BusinessInfoGroupComponent, SearchRelationPipe, BusinessAssetsInfoComponent, BusinessBankingDetailsComponent],
|
declarations: [RentalInfoComponent, TelePdAllocationComponent, FinancialInfoComponent, BusinessInfoComponent, EmploymentInfoComponent, StockComponent, BankingDetailsComponent, ListPdComponent, FamilyDetailsComponent, AddressComponent, ManagePdComponent, MapPdViewComponent, AddPdComponent, ViewPdComponent, PdAllocationComponent, SmartPdAllocationComponent, SchedulePdComponent, EditPdApplicantComponent, EditPdMasterComponent, StartPdComponent, InprogressPdComponent, AllPdComponent, ScheduledPdComponent, CompletedPdComponent, QcCompletedPdComponent, ClientInfoComponent, CurrentLoanComponent, AssetsInfoComponent, LoanDetailsComponent, OtherIncomeComponent, SupplierInfoComponent, PersonalInfoComponent, LenderRepresentativeComponent, PdReportComponent, AssessedIncomeComponent, AllocationViewMoreComponent, PdRequirementComponent, GeneralInfoComponent, ModelEditPdReportComponent, OtherApplicantDetailsComponent, NeighbourHoodComponent, DialogChangeCurrentVenrsion, FinalRemarksComponent, BusinessOtherFamilyMemberComponent, QcReviewComponent, BusinessInfoGroupComponent, SearchRelationPipe, DeleteRecordsCountPipe, BusinessAssetsInfoComponent, BusinessBankingDetailsComponent, SalesDetailsComponent, DailySalesDetailsComponent, SalesCalculationComponent, ManageSalesComponent, PurchaseDetailsComponent, BusinessExpenseDetailsComponent, HouseHoldDetailsComponent, OtherBusinessIncomeDetailsComponent, ManagePurchaseComponent, ManageBusinesExpenseComponent, ManageHouseHoldComponent, ManageOtherBusinessIncomeComponent, GrossProfitCalculationComponent, ManageDailySalesComponent],
|
||||||
|
|
||||||
// exports: [PdAllocationComponent, SmartPdAllocationComponent, SchedulePdComponent, EditPdApplicantComponent, EditPdMasterComponent, StartPdComponent, CompletedPdComponent, QcCompletedPdComponent],
|
// exports: [PdAllocationComponent, SmartPdAllocationComponent, SchedulePdComponent, EditPdApplicantComponent, EditPdMasterComponent, StartPdComponent, CompletedPdComponent, QcCompletedPdComponent],
|
||||||
// providers: [PdTrigerService, GetGeometricLocationService],
|
// providers: [PdTrigerService, GetGeometricLocationService],
|
||||||
@ -308,13 +322,13 @@ const pdCustomNotifierOptions: NotifierOptions = {
|
|||||||
OwlNativeDateTimeModule,
|
OwlNativeDateTimeModule,
|
||||||
],
|
],
|
||||||
// declarations: [ListPdComponent, ManagePdComponent, MapPdViewComponent, AddPdComponent, ViewPdComponent, PdAllocationComponent, SmartPdAllocationComponent, SchedulePdComponent, EditPdApplicantComponent, EditPdMasterComponent, StartPdComponent, InprogressPdComponent, AllPdComponent, ScheduledPdComponent, CompletedPdComponent, QcCompletedPdComponent, ClientInfoComponent, SupplierInfoComponent, PersonalInfoComponent, AssetsInfoComponent],
|
// declarations: [ListPdComponent, ManagePdComponent, MapPdViewComponent, AddPdComponent, ViewPdComponent, PdAllocationComponent, SmartPdAllocationComponent, SchedulePdComponent, EditPdApplicantComponent, EditPdMasterComponent, StartPdComponent, InprogressPdComponent, AllPdComponent, ScheduledPdComponent, CompletedPdComponent, QcCompletedPdComponent, ClientInfoComponent, SupplierInfoComponent, PersonalInfoComponent, AssetsInfoComponent],
|
||||||
exports: [PdAllocationComponent, SmartPdAllocationComponent, TelePdAllocationComponent, SchedulePdComponent, EditPdApplicantComponent, EditPdMasterComponent, StartPdComponent, CompletedPdComponent, QcCompletedPdComponent, ClientInfoComponent, SupplierInfoComponent, PersonalInfoComponent, CurrentLoanComponent, LoanDetailsComponent, OtherIncomeComponent, AssetsInfoComponent, AddressComponent, FamilyDetailsComponent, BankingDetailsComponent, StockComponent, EmploymentInfoComponent, BusinessInfoComponent, FinancialInfoComponent, LenderRepresentativeComponent,RentalInfoComponent, AssessedIncomeComponent, AllocationViewMoreComponent, GeneralInfoComponent, PdRequirementComponent, OtherApplicantDetailsComponent, NeighbourHoodComponent, BusinessOtherFamilyMemberComponent, BusinessInfoGroupComponent],
|
exports: [PdAllocationComponent, SmartPdAllocationComponent, TelePdAllocationComponent, SchedulePdComponent, EditPdApplicantComponent, EditPdMasterComponent, StartPdComponent, CompletedPdComponent, QcCompletedPdComponent, ClientInfoComponent, SupplierInfoComponent, PersonalInfoComponent, CurrentLoanComponent, LoanDetailsComponent, OtherIncomeComponent, AssetsInfoComponent, AddressComponent, FamilyDetailsComponent, BankingDetailsComponent, StockComponent, EmploymentInfoComponent, BusinessInfoComponent, FinancialInfoComponent, LenderRepresentativeComponent,RentalInfoComponent, AssessedIncomeComponent, AllocationViewMoreComponent, GeneralInfoComponent, PdRequirementComponent, OtherApplicantDetailsComponent, NeighbourHoodComponent, BusinessOtherFamilyMemberComponent, BusinessInfoGroupComponent,DailySalesDetailsComponent, SalesCalculationComponent, PurchaseDetailsComponent, BusinessExpenseDetailsComponent, HouseHoldDetailsComponent, OtherBusinessIncomeDetailsComponent, ManageSalesComponent, ManagePurchaseComponent, ManageBusinesExpenseComponent, ManageHouseHoldComponent, ManageOtherBusinessIncomeComponent, GrossProfitCalculationComponent, ManageDailySalesComponent],
|
||||||
providers: [PdTrigerService, GetGeometricLocationService,{provide: MAT_DATE_LOCALE, useValue: 'en-GB'},
|
providers: [PdTrigerService, GetGeometricLocationService,{provide: MAT_DATE_LOCALE, useValue: 'en-GB'},
|
||||||
{provide: DateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE]},
|
{provide: DateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE]},
|
||||||
{provide: MAT_DATE_FORMATS, useValue: MAT_MOMENT_DATE_FORMATS}],
|
{provide: MAT_DATE_FORMATS, useValue: MAT_MOMENT_DATE_FORMATS}],
|
||||||
|
|
||||||
entryComponents: [PdAllocationComponent, SmartPdAllocationComponent, SchedulePdComponent, EditPdApplicantComponent, EditPdMasterComponent, TelePdAllocationComponent, AllocationViewMoreComponent, PersonalInfoComponent,BusinessAssetsInfoComponent,
|
entryComponents: [PdAllocationComponent, SmartPdAllocationComponent, SchedulePdComponent, EditPdApplicantComponent, EditPdMasterComponent, TelePdAllocationComponent, AllocationViewMoreComponent, PersonalInfoComponent,BusinessAssetsInfoComponent,
|
||||||
ClientInfoComponent, SupplierInfoComponent, CurrentLoanComponent, LoanDetailsComponent, OtherIncomeComponent, AssetsInfoComponent, AddressComponent, FamilyDetailsComponent, BankingDetailsComponent, StockComponent, EmploymentInfoComponent, BusinessInfoComponent, FinancialInfoComponent, LenderRepresentativeComponent,RentalInfoComponent, AssessedIncomeComponent, GeneralInfoComponent, PdRequirementComponent, ModelEditPdReportComponent, OtherApplicantDetailsComponent, NeighbourHoodComponent, DialogChangeCurrentVenrsion, FinalRemarksComponent, BusinessOtherFamilyMemberComponent, QcReviewComponent, BusinessInfoGroupComponent,BusinessBankingDetailsComponent],
|
ClientInfoComponent, SupplierInfoComponent, CurrentLoanComponent, LoanDetailsComponent, OtherIncomeComponent, AssetsInfoComponent, AddressComponent, FamilyDetailsComponent, BankingDetailsComponent, StockComponent, EmploymentInfoComponent, BusinessInfoComponent, FinancialInfoComponent, LenderRepresentativeComponent,RentalInfoComponent, AssessedIncomeComponent, GeneralInfoComponent, PdRequirementComponent, ModelEditPdReportComponent, OtherApplicantDetailsComponent, NeighbourHoodComponent, DialogChangeCurrentVenrsion, FinalRemarksComponent, BusinessOtherFamilyMemberComponent, QcReviewComponent, BusinessInfoGroupComponent,BusinessBankingDetailsComponent, ManageSalesComponent, ManagePurchaseComponent, ManageBusinesExpenseComponent, ManageHouseHoldComponent, ManageOtherBusinessIncomeComponent, ManageDailySalesComponent],
|
||||||
|
|
||||||
})
|
})
|
||||||
export class ManagePdModule {
|
export class ManagePdModule {
|
||||||
|
|||||||
@ -0,0 +1,8 @@
|
|||||||
|
import { DeleteRecordsCountPipe } from './delete-records-count.pipe';
|
||||||
|
|
||||||
|
describe('DeleteRecordsCountPipe', () => {
|
||||||
|
it('create an instance', () => {
|
||||||
|
const pipe = new DeleteRecordsCountPipe();
|
||||||
|
expect(pipe).toBeTruthy();
|
||||||
|
});
|
||||||
|
});
|
||||||
@ -0,0 +1,18 @@
|
|||||||
|
import { Pipe, PipeTransform } from '@angular/core';
|
||||||
|
|
||||||
|
@Pipe({
|
||||||
|
name: 'deleteRecordsCount'
|
||||||
|
})
|
||||||
|
export class DeleteRecordsCountPipe implements PipeTransform {
|
||||||
|
|
||||||
|
transform(value: any): any {
|
||||||
|
if(value.length>0){
|
||||||
|
let filterData = value.filter(val=>val.isactive===true);
|
||||||
|
return filterData.length;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -558,5 +558,14 @@ export class PdTrigerService {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// save assessed sales item wise
|
||||||
|
saveAssessedDetails(methodURl: string,saveData:any){
|
||||||
|
//saveData.createdby = this._aws.getlocale();
|
||||||
|
return this._http.post<any>(this.apiUrl + methodURl, { "records": saveData })
|
||||||
|
.pipe(
|
||||||
|
catchError(this.handleError('operation', []))
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,7 +1,6 @@
|
|||||||
import { NgModule } from '@angular/core';
|
import { NgModule } from '@angular/core';
|
||||||
import { CommonModule } from '@angular/common';
|
import { CommonModule } from '@angular/common';
|
||||||
import { RouterModule } from '@angular/router';
|
import { RouterModule } from '@angular/router';
|
||||||
|
|
||||||
import { CKEditorModule } from 'ng2-ckeditor';
|
import { CKEditorModule } from 'ng2-ckeditor';
|
||||||
import { PdfViewerModule } from 'ng2-pdf-viewer';
|
import { PdfViewerModule } from 'ng2-pdf-viewer';
|
||||||
import {
|
import {
|
||||||
|
|||||||
@ -0,0 +1,31 @@
|
|||||||
|
import { Directive, ElementRef, HostListener, Input } from '@angular/core';
|
||||||
|
|
||||||
|
@Directive({
|
||||||
|
selector: '[OnlyNumber]'
|
||||||
|
})
|
||||||
|
export class NumbersOnlyDirective {
|
||||||
|
|
||||||
|
// Allow decimal numbers. The \. is only allowed once to occur
|
||||||
|
private regex: RegExp = new RegExp(/^[0-9]+(\.[0-9]*){0,1}$/g);
|
||||||
|
|
||||||
|
// Allow key codes for special events. Reflect :
|
||||||
|
// Backspace, tab, end, home
|
||||||
|
private specialKeys: Array<string> = [ 'Backspace', 'Tab', 'End', 'Home' ];
|
||||||
|
|
||||||
|
constructor(private el: ElementRef) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@HostListener('keydown', [ '$event' ])
|
||||||
|
onKeyDown(event: KeyboardEvent) {
|
||||||
|
// Allow Backspace, tab, end, and home keys
|
||||||
|
if (this.specialKeys.indexOf(event.key) !== -1) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let current: string = this.el.nativeElement.value;
|
||||||
|
let next: string = current.concat(event.key);
|
||||||
|
if (next && !String(next).match(this.regex)) {
|
||||||
|
event.preventDefault();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -5,6 +5,7 @@ import { HorizontalMenuItems } from './menu-items/horizontal-menu-items';
|
|||||||
import { AccordionAnchorDirective, AccordionLinkDirective, AccordionDirective } from './accordion';
|
import { AccordionAnchorDirective, AccordionLinkDirective, AccordionDirective } from './accordion';
|
||||||
import { ToggleFullscreenDirective } from './fullscreen/toggle-fullscreen.directive';
|
import { ToggleFullscreenDirective } from './fullscreen/toggle-fullscreen.directive';
|
||||||
import { RatingComponent} from './rating/rating.component';
|
import { RatingComponent} from './rating/rating.component';
|
||||||
|
import { NumbersOnlyDirective } from './numbers-only/numbers-only.directive';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
declarations: [
|
declarations: [
|
||||||
@ -12,14 +13,16 @@ import { RatingComponent} from './rating/rating.component';
|
|||||||
AccordionLinkDirective,
|
AccordionLinkDirective,
|
||||||
AccordionDirective,
|
AccordionDirective,
|
||||||
ToggleFullscreenDirective,
|
ToggleFullscreenDirective,
|
||||||
RatingComponent
|
RatingComponent,
|
||||||
|
NumbersOnlyDirective
|
||||||
],
|
],
|
||||||
exports: [
|
exports: [
|
||||||
AccordionAnchorDirective,
|
AccordionAnchorDirective,
|
||||||
AccordionLinkDirective,
|
AccordionLinkDirective,
|
||||||
AccordionDirective,
|
AccordionDirective,
|
||||||
ToggleFullscreenDirective,
|
ToggleFullscreenDirective,
|
||||||
RatingComponent
|
RatingComponent,
|
||||||
|
NumbersOnlyDirective
|
||||||
],
|
],
|
||||||
providers: [ MenuItems, HorizontalMenuItems ]
|
providers: [ MenuItems, HorizontalMenuItems ]
|
||||||
})
|
})
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user