2779 lines
94 KiB
TypeScript
2779 lines
94 KiB
TypeScript
import {
|
|
AfterViewInit,
|
|
Component,
|
|
HostListener,
|
|
OnChanges,
|
|
OnDestroy,
|
|
OnInit,
|
|
SimpleChanges,
|
|
ViewContainerRef,
|
|
} from '@angular/core';
|
|
import {
|
|
FormBuilder,
|
|
FormControl,
|
|
FormGroup,
|
|
Validators,
|
|
} from '@angular/forms';
|
|
import { Router } from '@angular/router';
|
|
import { Store } from '@ngrx/store';
|
|
import {
|
|
ActionsLayout,
|
|
DialogCloseResult,
|
|
DialogRef,
|
|
DialogService,
|
|
WindowState,
|
|
} from '@progress/kendo-angular-dialog';
|
|
import {
|
|
BadgeAlign,
|
|
BadgeFill,
|
|
BadgePosition,
|
|
BadgeSize,
|
|
BadgeThemeColor,
|
|
} from '@progress/kendo-angular-indicators';
|
|
import { Observable, of, Subscription } from 'rxjs';
|
|
import { catchError, map, tap } from 'rxjs/operators';
|
|
import { AuthService } from 'src/app/auth/services/auth.service';
|
|
import { Billing } from 'src/app/models/billing.model';
|
|
import { CartItensModel } from 'src/app/models/cart-itens.model';
|
|
import { CartModel } from 'src/app/models/cart.model';
|
|
import { CustomerAddress } from 'src/app/models/customer-address.model';
|
|
import { Customer } from 'src/app/models/customer.model';
|
|
import { LogOrder } from 'src/app/models/log-order.model';
|
|
import { OrderDelivery } from 'src/app/models/order-delivery.model';
|
|
import { PartnerSales } from 'src/app/models/partners-sales.model';
|
|
import { PaymentPlan } from 'src/app/models/payment-plan.model';
|
|
import { Place } from 'src/app/models/places.model';
|
|
import { StoreERP } from 'src/app/models/store.model';
|
|
import { CustomerService } from 'src/app/services/customer.service';
|
|
import { LookupService } from 'src/app/services/lookup.service';
|
|
import { MessageService } from 'src/app/services/messages.service';
|
|
import { OrderService } from 'src/app/services/order.service';
|
|
import { PreOrderService } from 'src/app/services/pre-order.service';
|
|
import { ProductService } from 'src/app/services/product.service';
|
|
import { ShoppingService } from 'src/app/services/shopping.service';
|
|
import { AuthUser } from '../../models/auth.user.model';
|
|
import { DeliveryTaxTable } from '../../models/delivery-tax-table.model';
|
|
import { ProductModalComponent } from '../components/product-modal/product-modal.component';
|
|
import {
|
|
ApplyDiscountOrderAction,
|
|
DeleteItemAction,
|
|
LoadShoppingAction,
|
|
LoadShoppingItemsAction,
|
|
} from '../store/actions/shopping.action';
|
|
import { OrderDeliveryTax } from '../store/models/order-delivery-tax.model';
|
|
import { OrderDiscount } from '../store/models/order-discount.model';
|
|
import { SaleState } from '../store/models/sale-state.model';
|
|
import { ShoppingItem } from '../store/models/shopping-item';
|
|
import { Shopping } from '../store/models/shopping.model';
|
|
|
|
export interface JsonModel {
|
|
shippingDate: string;
|
|
}
|
|
|
|
@Component({
|
|
selector: 'app-cart-sales',
|
|
templateUrl: './cart-sales.component.html',
|
|
styleUrls: [
|
|
'./cart-sales.component.scss',
|
|
'./cart-sales-compl.component.scss',
|
|
],
|
|
})
|
|
export class CartSalesComponent
|
|
implements OnInit, AfterViewInit, OnDestroy, OnChanges {
|
|
public containerRef: ViewContainerRef;
|
|
public resultQuestion;
|
|
|
|
shoppingItems$: Observable<ShoppingItem[]>;
|
|
shopping$: Observable<Shopping>;
|
|
subscriptionShoppingItems: Subscription;
|
|
shoppingItems: ShoppingItem[] = [];
|
|
subscriptionShopping: Subscription;
|
|
shopping: Shopping;
|
|
totalWeight = 0;
|
|
shoppingSubscription: Subscription;
|
|
discountUserSubscription: Subscription;
|
|
subscriptionUpdatePayment: Subscription;
|
|
subscriptionLoad: Subscription;
|
|
placesInteriorSubscription: Subscription;
|
|
placesInterior: any[];
|
|
loading$: Observable<boolean>;
|
|
updating$: Observable<boolean>;
|
|
error$: Observable<Error>;
|
|
billing$: Observable<Billing[]>;
|
|
billing: Billing[] = [];
|
|
subscriptionBilling: Subscription;
|
|
paymentPlan$: Observable<PaymentPlan[]>;
|
|
paymentPlans: PaymentPlan[];
|
|
subscritpionPaymentPlan: Subscription;
|
|
partners$: Observable<PartnerSales[]>;
|
|
invoiceStores$: Observable<StoreERP[]>;
|
|
stores: StoreERP[] = [];
|
|
subscriptionStores: Subscription;
|
|
searchCustomerSubscription: Subscription;
|
|
subscriptionCustomer: Subscription;
|
|
deliveryDaysSubscription: Subscription;
|
|
places$: Observable<Place[]>;
|
|
storePlaces$: Observable<Place[]>;
|
|
totalCart$: Observable<number>;
|
|
formCustomer: FormGroup;
|
|
formResumeOrder: FormGroup;
|
|
formAddress: FormGroup;
|
|
formPayment: FormGroup;
|
|
formNotes: FormGroup;
|
|
formDiscountOrder: FormGroup;
|
|
idPaymentPlan: number;
|
|
selectPaymentPlan: any;
|
|
idBilling: string;
|
|
itemSelect: ShoppingItem; // utilizado para editar (desconto) / excluir item do pedido
|
|
showDiscountItem = false;
|
|
updateItem = false;
|
|
inProcess = false;
|
|
|
|
pageCustomer = true;
|
|
pageAddress = false;
|
|
pagePayment = false;
|
|
pageNotesDelivery = false;
|
|
denyScheduleDelivery = true;
|
|
percentSeller = 0;
|
|
percentAuth = 0;
|
|
preOrderNumber = 0;
|
|
orderNumber = 0;
|
|
orderStatus = '';
|
|
urlPrintPreOrder = '';
|
|
urlPrintOrder = '';
|
|
modelPrintPreOrder = 'B';
|
|
modelPrintOrder = 'A';
|
|
openedModelPrintPreOrder = false;
|
|
formModelPreOrder: FormGroup;
|
|
formModelOrder: FormGroup;
|
|
formPreCustomer: FormGroup;
|
|
openedPreCustomer = false;
|
|
|
|
showProductsWithoutTax = false;
|
|
productsWithoutTax: any[];
|
|
|
|
openedConfirmation = false;
|
|
openInformation = false;
|
|
openedConfirmationTax = false;
|
|
openedConfirmationCancelItem = false;
|
|
showCreateCustomer = false;
|
|
showSelectCustomer = false;
|
|
showCreateAddress = false;
|
|
showInformationCreateOrder = false;
|
|
titleMessage = 'Confirmar';
|
|
messageConfirmation = 'Confirma processamento?';
|
|
informationDelivery = '';
|
|
textButtonConfirmation = 'OK';
|
|
textButtonCancel = 'Cancelar';
|
|
openConfirmChangePayment: any;
|
|
|
|
// Definições padrão para centralização
|
|
windowWidth: number = 600; // Ajuste para desktop
|
|
windowHeight: number = 500;
|
|
windowTop: number = 100;
|
|
windowLeft: number = 50;
|
|
|
|
isMobile: boolean = false;
|
|
|
|
showInformation = false;
|
|
titleInformation = '';
|
|
messageInformation = '';
|
|
informationDescription = '';
|
|
|
|
showSelectAddress = false;
|
|
|
|
openedAuthUser = false;
|
|
openedConfirmationOrder = false;
|
|
|
|
public size: BadgeSize = 'medium';
|
|
public fill: BadgeFill = 'solid';
|
|
public themeColor: BadgeThemeColor = 'primary';
|
|
public vertical: 'top';
|
|
public horizontal: 'end';
|
|
|
|
public position: BadgePosition = 'edge';
|
|
|
|
public get align(): BadgeAlign {
|
|
return { vertical: this.vertical, horizontal: this.horizontal };
|
|
}
|
|
|
|
/* Header */
|
|
public userName: string;
|
|
public storeName: string;
|
|
|
|
/* Auth partner for sale */
|
|
showAuthPartner = false;
|
|
|
|
/* Confirm user for tax */
|
|
public showConfirmUser = false;
|
|
userForm: FormGroup;
|
|
|
|
/* Dialog Discount Order */
|
|
showDialogDiscountOrder = false;
|
|
public actionsLayout: ActionsLayout = 'normal';
|
|
userManager: boolean;
|
|
|
|
/* Loadings */
|
|
loadingIconPreOrder = '';
|
|
isLoadingPreOrder = false;
|
|
|
|
loadingIconOrder = '';
|
|
isLoadingOrder = false;
|
|
|
|
showSelectDeliveryTax = false;
|
|
dataDeliveryTax: DeliveryTaxTable[];
|
|
loadingDeliveryTax = false;
|
|
|
|
customer: Customer;
|
|
payment: PaymentPlan;
|
|
public cartData: {
|
|
orderValue: number;
|
|
taxValue: number;
|
|
discountValue: number;
|
|
carrierId: number;
|
|
} = {
|
|
taxValue: 0,
|
|
discountValue: 0,
|
|
orderValue: 0,
|
|
carrierId: 0,
|
|
};
|
|
|
|
public windowState: WindowState = 'maximized';
|
|
public openedPrintPreOrder = false;
|
|
public openedPrintOrder = false;
|
|
|
|
public openedModelPrintOrder = false;
|
|
|
|
public openClosePrintPreOrder(isOpened: boolean): void {
|
|
this.openedPrintPreOrder = isOpened;
|
|
}
|
|
|
|
public openClosePrintOrder(isOpened: boolean): void {
|
|
this.openedPrintOrder = isOpened;
|
|
}
|
|
|
|
/* Delivery in Store */
|
|
showDeliveryStore = false;
|
|
storePlaceSelected: Place;
|
|
showConfirmCreateOrder = true;
|
|
|
|
/* Days for Delivery */
|
|
deliveryDays: number;
|
|
retiraPosteriorDays: number;
|
|
|
|
constructor(
|
|
private store: Store<SaleState>,
|
|
private readonly shoppingService: ShoppingService,
|
|
private fb: FormBuilder,
|
|
private readonly lookupService: LookupService,
|
|
private dialogService: DialogService,
|
|
private readonly authService: AuthService,
|
|
private readonly preOrderService: PreOrderService,
|
|
private readonly router: Router,
|
|
private readonly orderService: OrderService,
|
|
private readonly messageService: MessageService,
|
|
private readonly productService: ProductService,
|
|
private readonly customerService: CustomerService
|
|
) { }
|
|
|
|
ngOnChanges(changes: SimpleChanges): void {
|
|
this.loadShopping();
|
|
}
|
|
|
|
ngAfterViewInit(): void { }
|
|
|
|
ngOnDestroy(): void {
|
|
if (this.shoppingSubscription) {
|
|
this.shoppingSubscription.unsubscribe();
|
|
}
|
|
if (this.placesInteriorSubscription) {
|
|
this.placesInteriorSubscription.unsubscribe();
|
|
}
|
|
if (this.discountUserSubscription) {
|
|
this.discountUserSubscription.unsubscribe();
|
|
}
|
|
if (this.subscriptionUpdatePayment) {
|
|
this.subscriptionUpdatePayment.unsubscribe();
|
|
}
|
|
if (this.subscriptionLoad) {
|
|
this.subscriptionLoad.unsubscribe();
|
|
}
|
|
if (this.subscriptionShopping) {
|
|
this.subscriptionShopping.unsubscribe();
|
|
}
|
|
if (this.subscriptionStores) {
|
|
this.subscriptionStores.unsubscribe();
|
|
}
|
|
if (this.subscritpionPaymentPlan) {
|
|
this.subscritpionPaymentPlan.unsubscribe();
|
|
}
|
|
if (this.subscriptionBilling) {
|
|
this.subscriptionBilling.unsubscribe();
|
|
}
|
|
if (this.subscriptionShoppingItems) {
|
|
this.subscriptionShoppingItems.unsubscribe();
|
|
}
|
|
if (this.searchCustomerSubscription) {
|
|
this.searchCustomerSubscription.unsubscribe();
|
|
}
|
|
if (this.subscriptionCustomer) {
|
|
this.subscriptionCustomer.unsubscribe();
|
|
}
|
|
|
|
if (this.deliveryDaysSubscription) {
|
|
this.deliveryDaysSubscription.unsubscribe();
|
|
}
|
|
}
|
|
|
|
loadShopping() {
|
|
this.shoppingSubscription = this.shopping$.subscribe((data) => {
|
|
this.shopping = data;
|
|
if (this.shopping !== null) {
|
|
this.totalWeight = data.totpeso;
|
|
this.loadFormOrder();
|
|
}
|
|
});
|
|
}
|
|
|
|
getTaxValue() {
|
|
const taxDelivery = JSON.parse(localStorage.getItem('taxDelivery'));
|
|
const taxValue = Number.parseFloat(
|
|
this.formResumeOrder.get('taxValue').value
|
|
);
|
|
console.log('taxValue: ' + taxValue);
|
|
return taxDelivery != null ? taxDelivery.taxValue : taxValue;
|
|
}
|
|
|
|
loadFormOrder() {
|
|
this.subscriptionShopping = this.shopping$.subscribe((data) => {
|
|
const taxDelivery = JSON.parse(localStorage.getItem('taxDelivery'));
|
|
this.formResumeOrder = this.fb.group({
|
|
taxValue: [
|
|
taxDelivery.taxValue > 0 ? taxDelivery.taxValue.toFixed(2) : '0',
|
|
],
|
|
discount: [data.vldesconto > 0 ? data.vldesconto.toFixed(2) : '0,00'],
|
|
carrierId: [taxDelivery.carrierId],
|
|
deliveryTaxId: [taxDelivery.deliveryTaxId],
|
|
});
|
|
});
|
|
}
|
|
|
|
ngOnInit(): void {
|
|
this.userForm = this.fb.group({
|
|
userName: new FormControl('', [Validators.required]),
|
|
password: new FormControl('', [Validators.required]),
|
|
notation: new FormControl('', [Validators.required]),
|
|
});
|
|
|
|
this.formCustomer = this.fb.group({
|
|
name: new FormControl({ value: '', disabled: true }, []),
|
|
document: new FormControl({ value: '', disabled: true }, []),
|
|
cellPhone: new FormControl({ value: '', disabled: true }, []),
|
|
cep: new FormControl({ value: '', disabled: true }, []),
|
|
address: new FormControl({ value: '', disabled: true }, []),
|
|
number: new FormControl({ value: '', disabled: true }, []),
|
|
city: new FormControl({ value: '', disabled: true }, []),
|
|
state: new FormControl({ value: '', disabled: true }, []),
|
|
complement: new FormControl({ value: '', disabled: true }, []),
|
|
});
|
|
this.formAddress = this.fb.group({
|
|
cellPhone: new FormControl({ value: '', disabled: true }, []),
|
|
zipCode: new FormControl({ value: '', disabled: true }, []),
|
|
address: new FormControl({ value: '', disabled: true }, []),
|
|
number: new FormControl({ value: '', disabled: true }, []),
|
|
city: new FormControl({ value: '', disabled: true }, []),
|
|
state: new FormControl({ value: '', disabled: true }, []),
|
|
complement: new FormControl({ value: '', disabled: true }, []),
|
|
referencePoint: new FormControl({ value: '', disabled: true }, []),
|
|
note: new FormControl({ value: '', disabled: true }, []),
|
|
});
|
|
|
|
let dataDeliveryComp = localStorage.getItem('dataDelivery');
|
|
let dataShippingDate = null;
|
|
let dataScheduleDelivery = null;
|
|
let dataShippingPriority = null;
|
|
let dataText1 = null;
|
|
let dataText2 = null;
|
|
let dataDeliveryText1 = null;
|
|
let dataDeliveryText2 = null;
|
|
let dataDeliveryText3 = null;
|
|
|
|
console.log(dataDeliveryComp);
|
|
|
|
if (dataDeliveryComp != null) {
|
|
const data = JSON.parse(localStorage.getItem('dataDelivery'));
|
|
dataShippingDate = data.shippingDate;
|
|
dataScheduleDelivery = data.scheduleDelivery;
|
|
dataShippingPriority = data.shippingPriority;
|
|
dataText1 = data.notification1;
|
|
dataText2 = data.notification;
|
|
dataDeliveryText1 = data.notificationDelivery1;
|
|
dataDeliveryText2 = data.notificationDelivery2;
|
|
dataDeliveryText3 = data.notificationDelivery3;
|
|
} else {
|
|
const data = {
|
|
dateDelivery: null,
|
|
notification: null,
|
|
notification1: null,
|
|
notificationDelivery1: null,
|
|
notificationDelivery2: null,
|
|
notificationDelivery3: null,
|
|
priorityDelivery: 'B',
|
|
scheduleDelivery: false,
|
|
};
|
|
|
|
localStorage.setItem('dataDelivery', JSON.stringify(data));
|
|
const resultado = JSON.parse(localStorage.getItem('dataDelivery'));
|
|
dataShippingDate = data.dateDelivery;
|
|
dataScheduleDelivery = data.scheduleDelivery;
|
|
dataShippingPriority = data.priorityDelivery;
|
|
dataText1 = resultado.notification1;
|
|
dataText2 = resultado.notification;
|
|
dataDeliveryText1 = resultado.notificationDelivery1;
|
|
dataDeliveryText2 = resultado.notificationDelivery2;
|
|
dataDeliveryText3 = resultado.notificationDelivery3;
|
|
}
|
|
|
|
this.formNotes = this.fb.group({
|
|
shippingDate: new FormControl(dataShippingDate),
|
|
scheduleDelivery: new FormControl(dataScheduleDelivery),
|
|
shippingPriority: new FormControl(dataShippingPriority),
|
|
notesText1: new FormControl(dataText1),
|
|
notesText2: new FormControl(dataText2),
|
|
notesDeliveryText1: new FormControl(dataDeliveryText1),
|
|
notesDeliveryText2: new FormControl(dataDeliveryText2),
|
|
notesDeliveryText3: new FormControl(dataDeliveryText3),
|
|
});
|
|
this.formResumeOrder = this.fb.group({
|
|
taxValue: new FormControl(this.cartData.taxValue.toFixed(2), []),
|
|
discount: new FormControl(this.cartData.discountValue.toFixed(2), []),
|
|
carrierId: new FormControl(this.cartData.carrierId, []),
|
|
});
|
|
this.formPayment = this.fb.group({
|
|
invoiceStore: new FormControl(null),
|
|
paymentPlan: new FormControl(null),
|
|
billing: new FormControl(null),
|
|
partner: new FormControl(null),
|
|
});
|
|
this.formModelPreOrder = this.fb.group({
|
|
model: new FormControl('B'),
|
|
});
|
|
this.formModelOrder = this.fb.group({
|
|
model: new FormControl('A'),
|
|
});
|
|
|
|
this.formPreCustomer = this.fb.group({
|
|
document: ['', Validators.required],
|
|
name: ['', Validators.required],
|
|
phone: ['', Validators.required],
|
|
});
|
|
|
|
const dataDelivery = JSON.parse(
|
|
localStorage.getItem('dataDelivery')
|
|
) as OrderDelivery;
|
|
|
|
this.formNotes.patchValue({
|
|
scheduleDelivery: dataDelivery.scheduleDelivery,
|
|
shippingPriority: dataDelivery.priorityDelivery,
|
|
notesText1: dataDelivery.notification,
|
|
notesText2: dataDelivery.notification1,
|
|
notesDeliveryText1: dataDelivery.notificationDelivery1,
|
|
notesDeliveryText2: dataDelivery.notificationDelivery2,
|
|
notesDeliveryText3: dataDelivery.notificationDelivery3,
|
|
});
|
|
|
|
this.setDataDelivery();
|
|
|
|
this.userName = this.authService.getUserName();
|
|
this.storeName = this.authService.getStoreName();
|
|
|
|
this.shopping$ = this.store.select((store) => store.shopping.shopping);
|
|
this.shoppingItems$ = this.store.select((store) => store.shopping.list);
|
|
this.loading$ = this.store.select((store) => store.shopping.loading);
|
|
this.updating$ = this.store.select((store) => store.shopping.updating);
|
|
this.error$ = this.store.select((store) => store.shopping.error);
|
|
this.totalCart$ = this.store.select((store) => store.shopping.total);
|
|
|
|
this.shoppingSubscription = this.shopping$.subscribe((data) => {
|
|
this.shopping = data;
|
|
if (this.shopping !== null) {
|
|
this.totalWeight = data.totpeso;
|
|
this.loadFormOrder();
|
|
}
|
|
});
|
|
|
|
this.placesInteriorSubscription = this.shoppingService
|
|
.getPlacesInterior()
|
|
.subscribe((places) => (this.placesInterior = places));
|
|
|
|
// calculate days for delivery //
|
|
this.deliveryDays = this.calculateDeliveryTime();
|
|
const customer: Customer = JSON.parse(localStorage.getItem('customer'));
|
|
const address: CustomerAddress = JSON.parse(
|
|
localStorage.getItem('address')
|
|
);
|
|
const invoiceStore = JSON.parse(
|
|
localStorage.getItem('invoiceStore')
|
|
) as StoreERP;
|
|
const cartId = localStorage.getItem('cart');
|
|
|
|
const saleDate = new Date();
|
|
const saleYear = saleDate.getFullYear();
|
|
const saleMonth = saleDate.getMonth() + 1;
|
|
const day = saleDate.getDate();
|
|
const stringDate =
|
|
('00' + day).slice(-2) +
|
|
'-' +
|
|
('00' + saleMonth).slice(-2) +
|
|
'-' +
|
|
saleYear;
|
|
console.log('Data atual: ' + stringDate);
|
|
this.deliveryDaysSubscription = this.shoppingService
|
|
.getDeliveryDays(
|
|
stringDate,
|
|
invoiceStore == null ? this.authService.getStore() : invoiceStore.id,
|
|
address != null
|
|
? address.placeId
|
|
: customer != null
|
|
? customer.placeId
|
|
: 0,
|
|
cartId
|
|
)
|
|
.subscribe((data) => {
|
|
this.deliveryDays = data.deliveryDays;
|
|
this.retiraPosteriorDays = data.retiraPosteriorDays;
|
|
console.log('Dias de entrega: ' + this.deliveryDays);
|
|
// let deliveryTime = 0;
|
|
// if (this.authService.getDeliveryTime() != null) {
|
|
// deliveryTime = Number.parseInt(this.authService.getDeliveryTime(), 10);
|
|
// console.log("Dias entrega: " + deliveryTime);
|
|
// }
|
|
const deliveryDate = new Date();
|
|
let Days = deliveryDate.getDate() + this.deliveryDays;
|
|
if (this.formNotes.get('shippingPriority').value == 'M') {
|
|
Days = deliveryDate.getDate() + this.retiraPosteriorDays;
|
|
}
|
|
deliveryDate.setDate(Days);
|
|
console.log(deliveryDate);
|
|
|
|
if (
|
|
this.formNotes.get('shippingDate').value == undefined ||
|
|
this.formNotes.get('shippingDate').value == null ||
|
|
Date.parse(this.formNotes.get('shippingDate').value) <
|
|
Date.parse(deliveryDate.toDateString())
|
|
) {
|
|
const model: JsonModel = {
|
|
shippingDate: deliveryDate != null ? deliveryDate.toString() : null,
|
|
};
|
|
this.formNotes.patchValue({
|
|
shippingDate:
|
|
deliveryDate != null ? new Date(model.shippingDate) : null,
|
|
});
|
|
}
|
|
});
|
|
|
|
this.partners$ = this.lookupService.getPartners();
|
|
this.invoiceStores$ = this.lookupService.getStore();
|
|
this.places$ = this.lookupService.getPlaces();
|
|
this.storePlaces$ = this.lookupService.getStorePlaces();
|
|
this.store.dispatch(new LoadShoppingAction(this.shoppingService.getCart()));
|
|
this.store.dispatch(
|
|
new LoadShoppingItemsAction(this.shoppingService.getCart())
|
|
);
|
|
this.pageCustomer = true;
|
|
|
|
this.billing$ = this.lookupService.getBilling(
|
|
customer !== null ? customer.customerId : 1
|
|
);
|
|
this.paymentPlan$ = this.lookupService.getPaymentPlan();
|
|
const saveBilling = localStorage.getItem('billing');
|
|
const savePartner = localStorage.getItem('partner');
|
|
|
|
this.subscriptionShoppingItems = this.shoppingItems$.subscribe((data) => {
|
|
this.shoppingItems = data;
|
|
console.log('Itens do pedido: ' + JSON.stringify(this.shoppingItems));
|
|
//calculo da taxa de entrega
|
|
this.calculateTaxDelivery(false);
|
|
});
|
|
this.subscriptionStores = this.invoiceStores$.subscribe((data) => {
|
|
console.log('Filial de venda: ' + JSON.stringify(data));
|
|
this.stores = data;
|
|
let saveStoreInvoice = localStorage.getItem('invoiceStore');
|
|
if (saveStoreInvoice == null) {
|
|
saveStoreInvoice = JSON.stringify(
|
|
this.stores.find((s) => s.id === this.authService.getStore())
|
|
);
|
|
localStorage.setItem('invoiceStore', saveStoreInvoice);
|
|
this.updateCart(this.shoppingService.getCart());
|
|
|
|
}
|
|
this.formPayment.patchValue({
|
|
invoiceStore: JSON.parse(saveStoreInvoice),
|
|
});
|
|
});
|
|
|
|
const billing = JSON.parse(saveBilling) as Billing;
|
|
if (billing !== null) {
|
|
this.subscriptionBilling = this.billing$.subscribe((data) => {
|
|
this.billing = data;
|
|
if (
|
|
saveBilling !== undefined &&
|
|
saveBilling != null &&
|
|
saveBilling !== 'undefined'
|
|
) {
|
|
if (billing != null) {
|
|
this.formPayment.patchValue({
|
|
billing,
|
|
});
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
if (billing !== null) {
|
|
const savePayment = localStorage.getItem('paymentPlan');
|
|
this.paymentPlan$ = this.lookupService.getPaymentPlan(billing.codcob);
|
|
this.subscritpionPaymentPlan = this.paymentPlan$.subscribe((data) => {
|
|
this.paymentPlans = data;
|
|
if (
|
|
savePayment !== undefined &&
|
|
savePayment != null &&
|
|
savePayment !== 'undefined'
|
|
) {
|
|
const paymentPlan = JSON.parse(savePayment) as PaymentPlan;
|
|
if (paymentPlan != null) {
|
|
this.formPayment.patchValue({
|
|
paymentPlan,
|
|
});
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
if (
|
|
savePartner !== undefined &&
|
|
savePartner != null &&
|
|
savePartner !== 'undefined'
|
|
) {
|
|
const partner = JSON.parse(savePartner) as PartnerSales;
|
|
if (partner != null) {
|
|
this.formPayment.patchValue({
|
|
partner,
|
|
});
|
|
}
|
|
}
|
|
|
|
if (dataDelivery != null) {
|
|
const delivery = dataDelivery;
|
|
const newDate =
|
|
delivery.dateDelivery != null ? delivery.dateDelivery : null; // new Date().getDate();
|
|
const model: JsonModel = {
|
|
shippingDate: newDate != null ? newDate.toString() : null,
|
|
};
|
|
this.formNotes.patchValue({
|
|
shippingDate: newDate != null ? new Date(model.shippingDate) : null, // delivery.dateDelivery, // delivery.dateDelivery,
|
|
scheduleDelivery: delivery.scheduleDelivery,
|
|
shippingPriority: delivery.priorityDelivery,
|
|
notesText1: delivery.notification,
|
|
notesText2: delivery.notification1,
|
|
notesDeliveryText1: delivery.notificationDelivery1,
|
|
notesDeliveryText2: delivery.notificationDelivery2,
|
|
notesDeliveryText3: delivery.notificationDelivery3,
|
|
});
|
|
}
|
|
|
|
this.formDiscountOrder = this.fb.group({
|
|
value: new FormControl(0.0),
|
|
profit: new FormControl(0.0),
|
|
discount: new FormControl(0.0),
|
|
discountValue: new FormControl(0.0),
|
|
netValue: new FormControl(0.0),
|
|
netProfit: new FormControl(0.0),
|
|
});
|
|
|
|
if (customer != null) {
|
|
this.updateFormCustomer(customer);
|
|
}
|
|
if (address != null) {
|
|
this.updateFormAddress(address);
|
|
}
|
|
}
|
|
|
|
async showConfirmation() {
|
|
const dialog: DialogRef = this.dialogService.open({
|
|
title: 'Por favor, confirme',
|
|
content: 'Deseja gravar como orçamento ?',
|
|
actions: [
|
|
{ text: 'Não', confirm: false },
|
|
{ text: 'Sim', confirm: true, themeColor: 'primary' },
|
|
],
|
|
width: 450,
|
|
height: 200,
|
|
minWidth: 250,
|
|
});
|
|
|
|
dialog.result.subscribe((result) => {
|
|
if (result instanceof DialogCloseResult) {
|
|
console.log('close');
|
|
} else {
|
|
const resultConfirmation = JSON.stringify(result);
|
|
console.log('action1', resultConfirmation);
|
|
if (JSON.parse(resultConfirmation).text === 'Sim') {
|
|
console.log('criando orçamento');
|
|
this.createPreOrder();
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
async showErrorMessage(message: string) {
|
|
const dialog: DialogRef = this.dialogService.open({
|
|
title: 'Ops, houve um problema no processamento',
|
|
content: message,
|
|
actions: [{ text: 'Ok', themeColor: 'primary' }],
|
|
width: 450,
|
|
height: 200,
|
|
minWidth: 250,
|
|
});
|
|
}
|
|
|
|
async showInformationMessage(message: string) {
|
|
const dialog: DialogRef = this.dialogService.open({
|
|
title: 'Sucesso!!',
|
|
content: message,
|
|
actions: [{ text: 'Ok', themeColor: 'primary' }],
|
|
width: 450,
|
|
height: 200,
|
|
minWidth: 250,
|
|
});
|
|
}
|
|
|
|
async setPaymentPlan(paymentPlan: any) {
|
|
if (localStorage.getItem('paymentPlan') === 'undefined') {
|
|
localStorage.setItem('paymentPlan', JSON.stringify(paymentPlan));
|
|
this.selectPaymentPlan = paymentPlan;
|
|
this.updateCart(this.shoppingService.getCart());
|
|
this.confirmChangePaymentPlan(true);
|
|
} else {
|
|
this.selectPaymentPlan = paymentPlan;
|
|
this.titleMessage = 'Alteração plano de pagamento';
|
|
this.messageConfirmation =
|
|
'Confirma a alteração do plano de pagamento, todos os descontos serão retirados do pedido?';
|
|
this.openConfirmChangePayment = true;
|
|
}
|
|
}
|
|
|
|
confirmChangePaymentPlan(result: any) {
|
|
if (result) {
|
|
this.openConfirmChangePayment = false;
|
|
localStorage.setItem(
|
|
'paymentPlan',
|
|
JSON.stringify(this.selectPaymentPlan)
|
|
);
|
|
this.updateCart(this.shoppingService.getCart());
|
|
const billing = JSON.parse(localStorage.getItem('billing')) as Billing;
|
|
this.idPaymentPlan = this.selectPaymentPlan.codplpag;
|
|
this.subscriptionUpdatePayment = this.shoppingService
|
|
.updatePricePaymentPlan(this.selectPaymentPlan, billing.codcob)
|
|
.subscribe((d) => {
|
|
this.store.dispatch(
|
|
new LoadShoppingItemsAction(this.shoppingService.getCart())
|
|
);
|
|
this.store.dispatch(
|
|
new LoadShoppingAction(this.shoppingService.getCart())
|
|
);
|
|
|
|
this.loadFormOrder();
|
|
});
|
|
} else {
|
|
this.openConfirmChangePayment = false;
|
|
const paymentPlan = JSON.parse(
|
|
localStorage.getItem('paymentPlan')
|
|
) as PaymentPlan;
|
|
this.formPayment.patchValue({
|
|
paymentPlan,
|
|
});
|
|
}
|
|
}
|
|
|
|
setBilling(billing: any) {
|
|
localStorage.setItem('billing', JSON.stringify(billing));
|
|
this.idBilling = billing.codcob;
|
|
console.log(JSON.stringify(billing));
|
|
localStorage.removeItem('paymentPlan');
|
|
this.formPayment.patchValue({
|
|
paymentPlan: null,
|
|
});
|
|
this.paymentPlan$ = this.lookupService.getPaymentPlan(billing.codcob);
|
|
this.subscritpionPaymentPlan = this.paymentPlan$
|
|
.pipe(
|
|
tap((data) => (this.paymentPlans = data)),
|
|
tap((planos) => console.log(planos))
|
|
)
|
|
.subscribe();
|
|
this.updateCart(this.shoppingService.getCart());
|
|
}
|
|
|
|
setPartner(partner: any) {
|
|
localStorage.setItem('partner', JSON.stringify(partner));
|
|
}
|
|
|
|
setInvoiceStore(invoiceStore: any) {
|
|
localStorage.setItem('invoiceStore', JSON.stringify(invoiceStore));
|
|
this.updateCart(this.shoppingService.getCart());
|
|
}
|
|
|
|
isInvoiceStore9Or10() {
|
|
return JSON.parse(localStorage.getItem('user')).store === '9' ||
|
|
JSON.parse(localStorage.getItem('user')).store === '10'
|
|
? true
|
|
: false;
|
|
}
|
|
|
|
setDataDelivery() {
|
|
console.log(this.formNotes.value);
|
|
this.calculateTaxDelivery(true);
|
|
let deliveryTime = 0;
|
|
if (this.authService.getDeliveryTime() != null) {
|
|
deliveryTime = Number.parseInt(this.authService.getDeliveryTime(), 3);
|
|
}
|
|
const deliveryDate = new Date();
|
|
let Days = deliveryDate.getDate() + this.deliveryDays;
|
|
|
|
const shippingPriority = this.formNotes.get('shippingPriority').value;
|
|
if (shippingPriority == 'M') {
|
|
Days = deliveryDate.getDate() + this.retiraPosteriorDays;
|
|
}
|
|
if (shippingPriority == 'A') {
|
|
Days = deliveryDate.getDate() + 1;
|
|
}
|
|
|
|
deliveryDate.setDate(Days);
|
|
|
|
let dtDelivery = new Date(this.formNotes.get('shippingDate').value);
|
|
const dateToday = new Date();
|
|
if (dtDelivery < dateToday || dtDelivery < deliveryDate) {
|
|
dtDelivery = null;
|
|
}
|
|
|
|
// console.log("data de entrega: " + dtDelivery.toString());
|
|
|
|
// tslint:disable-next-line: prefer-const
|
|
let orderDelivery = new OrderDelivery();
|
|
orderDelivery.dateDelivery = dtDelivery;
|
|
orderDelivery.scheduleDelivery =
|
|
this.formNotes.get('scheduleDelivery').value;
|
|
|
|
if (shippingPriority == 'M') {
|
|
const newDate = deliveryDate != null ? deliveryDate : null; // new Date().getDate();
|
|
const model: JsonModel = {
|
|
shippingDate: newDate != null ? newDate.toString() : null,
|
|
};
|
|
console.log('data de retira posterior: ' + deliveryDate.toString());
|
|
this.formNotes.patchValue({
|
|
shippingDate:
|
|
deliveryDate != null ? new Date(model.shippingDate) : null,
|
|
});
|
|
} else {
|
|
const newDate = deliveryDate != null ? deliveryDate : null; // new Date().getDate();
|
|
const model: JsonModel = {
|
|
shippingDate: newDate != null ? newDate.toString() : null,
|
|
};
|
|
if (dtDelivery < dateToday || dtDelivery < deliveryDate) {
|
|
this.formNotes.patchValue({
|
|
shippingDate:
|
|
deliveryDate != null ? new Date(model.shippingDate) : null,
|
|
});
|
|
}
|
|
}
|
|
|
|
if (dtDelivery != null && dtDelivery > deliveryDate) {
|
|
orderDelivery.scheduleDelivery = dtDelivery > deliveryDate ? true : false;
|
|
this.formNotes.patchValue({
|
|
scheduleDelivery: orderDelivery.scheduleDelivery,
|
|
});
|
|
}
|
|
// const dataDelivery = localStorage.getItem('dataDelivery')
|
|
// ? (JSON.parse(localStorage.getItem('dataDelivery')!) as OrderDelivery)
|
|
// : null;
|
|
// console.log(`data de entrega: ${dataDelivery}`);
|
|
// if (dataDelivery != null) {
|
|
// this.formNotes.get('notesText1').setValue(dataDelivery.notification1);
|
|
// } else {
|
|
orderDelivery.notification = this.formNotes.get('notesText1').value;
|
|
// }
|
|
orderDelivery.priorityDelivery =
|
|
this.formNotes.get('shippingPriority').value;
|
|
orderDelivery.notification1 = this.formNotes.get('notesText2').value;
|
|
|
|
orderDelivery.notificationDelivery1 =
|
|
this.formNotes.get('notesDeliveryText1').value;
|
|
orderDelivery.notificationDelivery2 =
|
|
this.formNotes.get('notesDeliveryText2').value;
|
|
orderDelivery.notificationDelivery3 =
|
|
this.formNotes.get('notesDeliveryText3').value;
|
|
orderDelivery.scheduleDelivery =
|
|
this.formNotes.get('scheduleDelivery').value;
|
|
localStorage.setItem('dataDelivery', JSON.stringify(orderDelivery));
|
|
}
|
|
|
|
activePageCustomer() {
|
|
this.pageCustomer = true;
|
|
this.pageAddress = false;
|
|
this.pagePayment = false;
|
|
this.pageNotesDelivery = false;
|
|
}
|
|
|
|
activePageAddress() {
|
|
this.pageCustomer = false;
|
|
this.pageAddress = true;
|
|
this.pagePayment = false;
|
|
this.pageNotesDelivery = false;
|
|
}
|
|
|
|
activePagePayment() {
|
|
console.log(JSON.stringify(localStorage.getItem('customer')));
|
|
const customer = JSON.parse(localStorage.getItem('customer')) as Customer;
|
|
|
|
if (localStorage.getItem('customer') != undefined) {
|
|
// if (customer.place.id == 19) {
|
|
// this.titleInformation = 'Pedido de venda';
|
|
// this.messageInformation = 'ATENÇÃO! Cliente com praça do E-COMMERCE!';
|
|
// this.informationDescription =
|
|
// 'Altere a praça do cliente pela opção NOVO CLIENTE para continuar.';
|
|
// this.showInformation = true;
|
|
// return;
|
|
// }
|
|
if (
|
|
customer.place.name == 'INATIVO' ||
|
|
customer.place.name == 'INATIVA'
|
|
) {
|
|
this.titleInformation = 'Pedido de venda';
|
|
this.messageInformation = 'ATENÇÃO! Cliente com praça INATIVA!';
|
|
this.informationDescription =
|
|
'Altere a praça do cliente pela opção NOVO CLIENTE para continuar.';
|
|
this.showInformation = true;
|
|
return;
|
|
}
|
|
}
|
|
this.pageCustomer = false;
|
|
this.pageAddress = false;
|
|
this.pagePayment = true;
|
|
this.pageNotesDelivery = false;
|
|
}
|
|
|
|
activePageNoteDelivery() {
|
|
this.pageCustomer = false;
|
|
this.pageAddress = false;
|
|
this.pagePayment = false;
|
|
this.pageNotesDelivery = true;
|
|
}
|
|
|
|
async selectCustomer() {
|
|
this.showSelectCustomer = true;
|
|
|
|
/*const dialog: DialogRef = this.dialogService.open({
|
|
title: 'Selecione o cliente desejado',
|
|
content: SelectCustomerComponent,
|
|
actions: [{ text: 'Cancelar', confirm: false }, { text: 'Confirmar', confirm: true, themeColor: 'primary' }],
|
|
width: 850,
|
|
height: 650,
|
|
minWidth: 250,
|
|
});
|
|
|
|
dialog.result.subscribe((result) => {
|
|
if (result instanceof DialogCloseResult) {
|
|
console.log('close');
|
|
} else {
|
|
const resultDialog = JSON.parse((JSON.stringify(result)));
|
|
if (resultDialog.confirm === true) {
|
|
const customer = (dialog.content.instance as SelectCustomerComponent)
|
|
.customer;
|
|
this.updateFormCustomer(customer);
|
|
} else {
|
|
console.log('action', result);
|
|
}
|
|
|
|
}
|
|
});*/
|
|
}
|
|
|
|
resultSelectCustomer(result: any) {
|
|
this.showSelectCustomer = false;
|
|
if (result != null) {
|
|
if (result.customerId !== 1) {
|
|
localStorage.removeItem('preCustomer');
|
|
}
|
|
this.updateFormCustomer(result);
|
|
localStorage.setItem('customer', JSON.stringify(result));
|
|
this.updateCart(this.shoppingService.getCart());
|
|
this.updateTaxDelivery();
|
|
}
|
|
}
|
|
|
|
private updateFormCustomer(customer: Customer) {
|
|
let preCustomer = null;
|
|
if (localStorage.getItem('preCustomer') !== undefined) {
|
|
preCustomer = JSON.parse(localStorage.getItem('preCustomer'));
|
|
}
|
|
localStorage.setItem('customer', JSON.stringify(customer));
|
|
this.billing$ = this.lookupService.getBilling(customer.customerId);
|
|
this.subscriptionBilling = this.billing$.subscribe((data) => {
|
|
this.billing = data;
|
|
});
|
|
this.customer = customer;
|
|
this.formCustomer.patchValue({
|
|
name: preCustomer === null ? customer.name : preCustomer.name,
|
|
document: preCustomer === null ? customer.cpfCnpj : preCustomer.document,
|
|
cellPhone: preCustomer === null ? customer.cellPhone : preCustomer.phone,
|
|
cep: customer.zipCode,
|
|
address: customer.address,
|
|
number: customer.addressNumber,
|
|
city: customer.city,
|
|
state: customer.state,
|
|
complement: customer.complement,
|
|
});
|
|
}
|
|
|
|
async updateTaxDelivery() {
|
|
this.formResumeOrder.patchValue({
|
|
taxValue: 0,
|
|
});
|
|
this.returnConfirmationTax(true);
|
|
this.calculateTaxDelivery(true);
|
|
this.returnConfirmationTax(true);
|
|
}
|
|
|
|
async getItens() {
|
|
const itensCart: CartItensModel[] = [];
|
|
this.subscriptionShoppingItems = this.shoppingItems$.subscribe((data) => {
|
|
this.shoppingItems = data;
|
|
data.forEach((itemShopping) => {
|
|
const item: CartItensModel = {
|
|
idProduct: itemShopping.idProduct,
|
|
idStock: itemShopping.stockStore,
|
|
deliveryMethod: itemShopping.deliveryType,
|
|
quantity: itemShopping.quantity,
|
|
listPrice: itemShopping.listPrice,
|
|
salePrice: itemShopping.price,
|
|
ean: itemShopping.ean,
|
|
descriptionAux: itemShopping.auxDescription,
|
|
environment: itemShopping.environment,
|
|
};
|
|
itensCart.push(item);
|
|
});
|
|
});
|
|
|
|
return itensCart;
|
|
}
|
|
|
|
async createPreOrder() {
|
|
const invoiceStore = JSON.parse(
|
|
localStorage.getItem('invoiceStore')
|
|
) as StoreERP;
|
|
const customer = JSON.parse(localStorage.getItem('customer')) as Customer;
|
|
const preCustomer = JSON.parse(localStorage.getItem('preCustomer'));
|
|
const address = JSON.parse(
|
|
localStorage.getItem('address')
|
|
) as CustomerAddress;
|
|
const paymentPlan = JSON.parse(
|
|
localStorage.getItem('paymentPlan')
|
|
) as PaymentPlan;
|
|
const billing = JSON.parse(localStorage.getItem('billing')) as Billing;
|
|
const partner = JSON.parse(localStorage.getItem('partner')) as PartnerSales;
|
|
|
|
if (invoiceStore === null) {
|
|
this.titleInformation = 'Pedido de venda';
|
|
this.messageInformation = 'Não foi possível gerar o pedido de venda!';
|
|
this.informationDescription =
|
|
'Favor selecione uma filial de venda para o orçamento.';
|
|
this.showInformation = true;
|
|
return;
|
|
}
|
|
|
|
if (customer === null) {
|
|
this.titleInformation = 'Pedido de venda';
|
|
this.messageInformation = 'Não foi possível gerar o pedido de venda!';
|
|
this.informationDescription =
|
|
'Favor informe um cliente ou consumidor final para gerar o orçamento de venda.';
|
|
this.showInformation = true;
|
|
return;
|
|
}
|
|
|
|
if (
|
|
(customer === null || customer.customerId === 1) &&
|
|
preCustomer === null
|
|
) {
|
|
this.titleInformation = 'Pedido de venda';
|
|
this.messageInformation = 'Não foi possível gerar o pedido de venda!';
|
|
this.informationDescription =
|
|
'Favor informe um cliente ou um pré-Cadastro de cliente para gerar o orçamento de venda.';
|
|
this.showInformation = true;
|
|
return;
|
|
}
|
|
|
|
if (this.formNotes.get('shippingDate').value === null) {
|
|
this.titleInformation = 'Pedido de venda';
|
|
this.messageInformation = 'Não foi possível gerar o pedido de venda!';
|
|
this.informationDescription =
|
|
'Favor informe a data de entrega do pedido.';
|
|
this.showInformation = true;
|
|
return;
|
|
}
|
|
|
|
let deliveryTime = 0;
|
|
if (this.authService.getDeliveryTime() != null) {
|
|
deliveryTime = Number.parseInt(this.authService.getDeliveryTime(), 10);
|
|
}
|
|
const deliveryDate = new Date();
|
|
const Days = deliveryDate.getDate() + this.deliveryDays;
|
|
deliveryDate.setDate(Days);
|
|
console.log(deliveryDate);
|
|
|
|
if (
|
|
Date.parse(this.formNotes.get('shippingDate').value) <
|
|
Date.parse(deliveryDate.toDateString())
|
|
) {
|
|
this.titleInformation = 'Pedido de venda';
|
|
this.messageInformation = 'Não foi possível gerar o pedido de venda!';
|
|
this.informationDescription = `Data de entrega inferior ao período mínimo definido para entrega. (${deliveryTime} dias)`;
|
|
this.showInformation = true;
|
|
return;
|
|
}
|
|
|
|
//validar itens com descrição diferente de ++ com cobrança CHM1
|
|
if (billing.codcob == 'CHM1') {
|
|
const chequeMoradiaItens = this.shoppingItems.filter((item) =>
|
|
item.smallDescription.startsWith('++', 0)
|
|
);
|
|
if (chequeMoradiaItens.length < this.shoppingItems.length) {
|
|
this.titleInformation = 'Pedido de venda';
|
|
this.messageInformation =
|
|
'Existem itens não permitidos para a cobrança utilizada.';
|
|
this.informationDescription = `Existem produtos que não são permitidos serem vendidos na cobrança CHM1.`;
|
|
this.showInformation = true;
|
|
this.isLoadingOrder = false;
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (!this.orderValid()) {
|
|
this.isLoadingOrder = false;
|
|
return;
|
|
}
|
|
|
|
const deliveryItens = this.shoppingItems.filter(
|
|
(item) => item.deliveryType === 'EF' || item.deliveryType === 'EN'
|
|
);
|
|
const taxValue = Number.parseFloat(
|
|
this.formResumeOrder.get('taxValue').value
|
|
);
|
|
|
|
console.log(deliveryItens);
|
|
|
|
// if (deliveryItens.length > 0 && taxValue === 0 &&
|
|
// this.formNotes.get('shippingPriority').value !== 'M') {
|
|
// this.titleInformation = 'Pedido de venda';
|
|
// this.messageInformation = 'Não foi possível gerar o pedido de venda!';
|
|
// this.informationDescription =
|
|
// 'Existem items a serem entregues e não foi informado a taxa de entrega, para concluir o pedido informe a taxa de entrega.';
|
|
// this.showInformation = true;
|
|
// return;
|
|
// }
|
|
|
|
// if (deliveryItens.length > 0 && customer.customerId === 1) {
|
|
// this.titleInformation = 'Pedido de venda';
|
|
// this.messageInformation = 'Não foi possível gerar o pedido de venda!';
|
|
// this.informationDescription = 'Pedido para consumidor final com itens a serem entregues, favor informar um cliente cadastrado.';
|
|
// this.showInformation = true;
|
|
// return;
|
|
// }
|
|
|
|
const itemRI = this.shoppingItems.filter(
|
|
(item) =>
|
|
item.deliveryType === 'RI' && item.stockStore !== invoiceStore.id
|
|
);
|
|
if (itemRI.length > 0) {
|
|
this.titleInformation = 'Pedido de venda';
|
|
this.messageInformation = 'Não foi possível gerar o pedido de venda!';
|
|
this.informationDescription =
|
|
'Existem items com tipo de entrega RETIRA IMEDIATA com a filial retira diferente da filial de faturamento.';
|
|
this.showInformation = true;
|
|
return;
|
|
}
|
|
|
|
const itensCart = await this.getItens();
|
|
const cart: CartModel = {
|
|
id: this.shoppingService.getCart(),
|
|
saleStore: invoiceStore.id,
|
|
userId: this.authService.getUser(),
|
|
idCustomer: customer.customerId,
|
|
idPaymentPlan: paymentPlan.codplpag,
|
|
idBilling: billing.codcob,
|
|
idSeller: this.authService.getSeller(),
|
|
idProfessional: partner != null ? partner.id : 0,
|
|
shippingDate: this.formNotes.get('shippingDate').value,
|
|
scheduleDelivery: this.formNotes.get('scheduleDelivery').value,
|
|
shippingPriority: this.formNotes.get('shippingPriority').value,
|
|
shippingValue: this.formResumeOrder.get('taxValue').value,
|
|
carrierId:
|
|
this.formResumeOrder.get('carrierId').value == null
|
|
? 0
|
|
: this.formResumeOrder.get('carrierId').value,
|
|
idAddress: address != null ? address.idAddress : 0,
|
|
notation1: this.formNotes.get('notesText1').value,
|
|
notation2: this.formNotes.get('notesText2').value,
|
|
notation3: '', // this.formNotation.get('observacao3').value,
|
|
deliveryNote1: this.formNotes.get('notesDeliveryText1').value,
|
|
deliveryNote2: this.formNotes.get('notesDeliveryText2').value,
|
|
deliveryNote3: this.formNotes.get('notesDeliveryText3').value,
|
|
itens: itensCart,
|
|
preCustomerDocument:
|
|
customer.customerId === 1 ? preCustomer.document : null,
|
|
preCustomerName: customer.customerId === 1 ? preCustomer.name : null,
|
|
preCustomerPhone: customer.customerId === 1 ? preCustomer.phone : null,
|
|
};
|
|
|
|
const result$ = this.preOrderService.create(cart);
|
|
this.isLoadingPreOrder = true;
|
|
this.loadingIconPreOrder = 'loading';
|
|
result$
|
|
.pipe(
|
|
map((result) => {
|
|
if (result.success) {
|
|
// this.openClosePrintPreOrder(true);
|
|
this.preOrderNumber = result.data.numorca;
|
|
this.selectModelPreOrder();
|
|
// this.urlPrintPreOrder = 'http://10.1.1.205:8068/Viewer/{action}?order=' + result.data.numorca;
|
|
// this.urlPrintPreOrder = 'http://localhost:4200/Viewer/{action}?order=' +
|
|
// result.data.numorca + '&model=' + this.modelPrintPreOrder;
|
|
// this.titleInformation = 'Gravar pedido de venda';
|
|
// this.messageInformation = 'Orçamento gerado com sucesso!';
|
|
// this.informationDescription = `Número do orçamento gerado: ${result.data.numorca}`;
|
|
// this.showInformationCreateOrder = true;
|
|
// this.openedPrintPreOrder = true;
|
|
}
|
|
}),
|
|
tap(() => {
|
|
this.isLoadingPreOrder = false;
|
|
this.loadingIconPreOrder = '';
|
|
}),
|
|
catchError((err) => {
|
|
this.messageInformation = 'Houve um erro ao gerar o orçamento!';
|
|
this.informationDescription = err.error.message;
|
|
this.showInformation = true;
|
|
return of();
|
|
})
|
|
)
|
|
.subscribe();
|
|
}
|
|
|
|
public closeSale() {
|
|
console.log('Fechamento venda.');
|
|
localStorage.removeItem('cart');
|
|
localStorage.removeItem('customer');
|
|
localStorage.removeItem('preCustomer');
|
|
localStorage.removeItem('paymentPlan');
|
|
localStorage.removeItem('billing');
|
|
localStorage.removeItem('address');
|
|
localStorage.removeItem('invoiceStore');
|
|
localStorage.removeItem('partner');
|
|
localStorage.removeItem('shoppingItem');
|
|
localStorage.removeItem('dataDelivery');
|
|
localStorage.removeItem('authorizationTax');
|
|
localStorage.removeItem('taxDelivery');
|
|
localStorage.removeItem('authorizationTax');
|
|
localStorage.removeItem('authorizationPartner');
|
|
this.router.navigate(['/sales/menu']);
|
|
}
|
|
|
|
async showConfirmationDiscountOrder() {
|
|
const discountValue =
|
|
this.formResumeOrder.get('discount').value != null
|
|
? Number.parseFloat(this.formResumeOrder.get('discount').value)
|
|
: 0;
|
|
const percentOrder = Number.parseFloat(
|
|
((discountValue / this.shopping.vlpedido) * 100).toPrecision(2)
|
|
);
|
|
this.titleMessage = 'Aplicar desconto sobre pedido';
|
|
this.messageConfirmation = `Confirma o desconto de R$ ${discountValue.toFixed(
|
|
2
|
|
)} sobre o valor total do pedido ?
|
|
Todos os descontos lançados no pedido serão desconsiderados. Confirma a aplicação do desconto?`;
|
|
this.textButtonConfirmation = 'Confirma';
|
|
this.openedConfirmation = true;
|
|
}
|
|
|
|
async showConfirmationTax() {
|
|
this.showSelectDeliveryTax = true;
|
|
|
|
// const taxValue = Number.parseFloat(this.formResumeOrder.get('taxValue').value);
|
|
|
|
// if (taxValue < 0) {
|
|
// this.titleInformation = 'Taxa de Entrega';
|
|
// this.messageInformation = 'Valor da taxa de entrega inválido!';
|
|
// this.informationDescription = 'O valor da taxa de entrega não pode ser inferior a ZERO! Obrigado tentar burlar o sistema, foi gerado LOG de audoria e enviado a diretoria! Aguarde... ';
|
|
// this.showInformation = true;
|
|
// return;
|
|
// }
|
|
|
|
// this.titleMessage = 'Taxa de entrega';
|
|
// this.messageConfirmation = `Confirma valor da taxa de entrega?`;
|
|
// this.textButtonConfirmation = 'Confirma';
|
|
// this.openedConfirmationTax = true;
|
|
}
|
|
|
|
confirmSelectDeliveryTax(show: boolean) {
|
|
this.showSelectDeliveryTax = false;
|
|
}
|
|
|
|
async showConfirmationCancelItem({ action, rowIndex, dataItem, sender }) {
|
|
this.itemSelect = dataItem;
|
|
this.titleMessage = 'Pedido de venda';
|
|
this.messageConfirmation = `Confirma a exclusão do item do pedido?`;
|
|
this.textButtonConfirmation = 'Confirma';
|
|
this.openedConfirmationCancelItem = true;
|
|
}
|
|
|
|
async showPageDiscountItem({ action, rowIndex, dataItem, sender }) {
|
|
this.itemSelect = dataItem;
|
|
console.log(dataItem);
|
|
if (this.itemSelect.promotion > 0) {
|
|
this.titleInformation = 'Desconto sobre item de venda';
|
|
this.messageInformation = 'Produto em promoção, desconto não permitido!';
|
|
this.informationDescription =
|
|
'Produtos em promoção não é permitido informar desconto.';
|
|
this.showInformation = true;
|
|
return;
|
|
}
|
|
|
|
const payment = JSON.parse(
|
|
localStorage.getItem('paymentPlan')
|
|
) as PaymentPlan;
|
|
if (payment == null) {
|
|
this.titleInformation = 'Desconto sobre item de venda';
|
|
this.messageInformation =
|
|
'Venda sem plano de pagamento informado, desconto não permitido!';
|
|
this.informationDescription =
|
|
'Selecione primeiro um plano de pagamento para aplicar um desconto!';
|
|
this.showInformation = true;
|
|
return;
|
|
}
|
|
|
|
this.authService.getUser();
|
|
if (payment.numdias > 30 && !this.authService.isManager()) {
|
|
this.titleInformation = 'Desconto sobre item de venda';
|
|
this.messageInformation =
|
|
'Plano de pagamento parcelado, desconto não permitido!';
|
|
this.informationDescription =
|
|
'Desconto autorizado apenas para venda a vista ou em 1x no cartão!';
|
|
this.showInformation = true;
|
|
return;
|
|
}
|
|
|
|
this.showDiscountItem = true;
|
|
}
|
|
|
|
async returnConfirmation(result: boolean) {
|
|
if (this.openedConfirmation) {
|
|
this.openedConfirmation = false;
|
|
console.log('Resultado desconto: ' + result);
|
|
if (result) {
|
|
const discountValue = Number.parseFloat(
|
|
this.formResumeOrder.get('discount').value
|
|
);
|
|
let percentOrder = (discountValue / this.cartData.orderValue) * 100;
|
|
if (this.percentSeller < percentOrder) {
|
|
this.openedAuthUser = true;
|
|
console.log('Desconto acima do permitido.');
|
|
return;
|
|
}
|
|
if (discountValue <= 0.01) {
|
|
percentOrder = 0;
|
|
}
|
|
const order: OrderDiscount = {
|
|
id: this.shoppingService.getCart(),
|
|
percentDiscount: percentOrder,
|
|
idUserAuth: this.authService.getUser(),
|
|
};
|
|
this.store.dispatch(new ApplyDiscountOrderAction(order));
|
|
this.store.dispatch(
|
|
new LoadShoppingAction(this.shoppingService.getCart())
|
|
);
|
|
this.loadFormOrder();
|
|
} else {
|
|
this.loadFormOrder();
|
|
}
|
|
}
|
|
|
|
if (this.openedConfirmationTax) {
|
|
this.returnConfirmationTax(true);
|
|
}
|
|
}
|
|
|
|
async returnConfirmationTax(result: boolean) {
|
|
this.openedConfirmationTax = false;
|
|
if (result) {
|
|
const taxValue = Number.parseFloat(
|
|
this.formResumeOrder.get('taxValue').value
|
|
);
|
|
const dataDelivery = JSON.parse(
|
|
localStorage.getItem('dataDelivery')
|
|
) as OrderDelivery;
|
|
|
|
let deliveryTaxId = 0;
|
|
let carrierId = 0;
|
|
if (taxValue >= 0) {
|
|
deliveryTaxId = Number.parseFloat(
|
|
this.formResumeOrder.get('deliveryTaxId').value
|
|
);
|
|
carrierId = Number.parseFloat(
|
|
this.formResumeOrder.get('carrierId').value
|
|
);
|
|
}
|
|
const order: OrderDeliveryTax = {
|
|
id: this.shoppingService.getCart(),
|
|
taxValue,
|
|
deliveryTaxId: deliveryTaxId,
|
|
carrierId: carrierId,
|
|
};
|
|
localStorage.setItem('taxDelivery', JSON.stringify(order));
|
|
this.loadFormOrder();
|
|
this.loadShopping();
|
|
|
|
/* this.store.dispatch(new UpdateDeliveryTaxAction(order));
|
|
this.updating$.subscribe((update) => {
|
|
if (!update) {
|
|
this.store.dispatch(new LoadShoppingAction(this.shoppingService.getCart()));
|
|
this.loadFormOrder();
|
|
this.loadShopping();
|
|
}
|
|
}); */
|
|
} else {
|
|
this.loadFormOrder();
|
|
}
|
|
}
|
|
|
|
async returnConfirmationCancelItem(result: any) {
|
|
console.log('Item:' + this.itemSelect);
|
|
this.openedConfirmationCancelItem = false;
|
|
if (result) {
|
|
this.store.dispatch(new DeleteItemAction(this.itemSelect.id));
|
|
this.updating$.subscribe((update) => {
|
|
if (!update) {
|
|
this.store.dispatch(
|
|
new LoadShoppingItemsAction(this.shoppingService.getCart())
|
|
);
|
|
this.store.dispatch(
|
|
new LoadShoppingAction(this.shoppingService.getCart())
|
|
);
|
|
this.loadFormOrder();
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
async returnAuthUser(userAuth: any) {
|
|
this.openedAuthUser = false;
|
|
console.log(userAuth);
|
|
if (userAuth.id != null) {
|
|
this.authService.getDiscount(userAuth.id).subscribe((result) => {
|
|
this.percentAuth = result.data.discountUser;
|
|
console.log('desconto autorizado: ' + this.percentAuth);
|
|
const discountValue = Number.parseFloat(
|
|
this.formResumeOrder.get('discount').value
|
|
);
|
|
if (discountValue === 0) {
|
|
return;
|
|
}
|
|
const initialValue = 0;
|
|
const orderValue = this.shoppingItems
|
|
.filter((i) => i.promotion == null || i.promotion === 0)
|
|
.reduce(
|
|
(previousValue, item) =>
|
|
previousValue + item.listPrice * item.quantity,
|
|
initialValue
|
|
);
|
|
const percentOrder = (discountValue / orderValue) * 100;
|
|
console.log('VALOR desconto pedido: ' + discountValue);
|
|
console.log('VALOR DO pedido: ' + orderValue);
|
|
console.log('desconto pedido: ' + percentOrder);
|
|
if (percentOrder > this.percentAuth) {
|
|
this.openInformation = true;
|
|
this.loadFormOrder();
|
|
return;
|
|
}
|
|
const order: OrderDiscount = {
|
|
id: this.shoppingService.getCart(),
|
|
percentDiscount: percentOrder,
|
|
idUserAuth: userAuth.id,
|
|
};
|
|
this.store.dispatch(new ApplyDiscountOrderAction(order));
|
|
this.updating$.subscribe((update) => {
|
|
if (!update) {
|
|
console.log('atualizando carrinho');
|
|
this.store.dispatch(
|
|
new LoadShoppingAction(this.shoppingService.getCart())
|
|
);
|
|
this.loadFormOrder();
|
|
}
|
|
});
|
|
});
|
|
} else {
|
|
this.loadFormOrder();
|
|
}
|
|
}
|
|
|
|
async returnDiscountItem(result: any) {
|
|
this.showDiscountItem = false;
|
|
if (result) {
|
|
this.store.dispatch(
|
|
new LoadShoppingItemsAction(this.shoppingService.getCart())
|
|
);
|
|
this.store.dispatch(
|
|
new LoadShoppingAction(this.shoppingService.getCart())
|
|
);
|
|
this.loadFormOrder();
|
|
this.calculateTaxDelivery(true);
|
|
}
|
|
}
|
|
|
|
async getPercentAuth(id: number) {
|
|
this.authService
|
|
.getDiscount(id)
|
|
.pipe(map((auth) => (this.percentAuth = auth.data.discountUser)));
|
|
}
|
|
|
|
closeInformation(close: boolean) {
|
|
this.openInformation = close;
|
|
}
|
|
|
|
showDialogCreateCustomer() {
|
|
this.showCreateCustomer = true;
|
|
}
|
|
|
|
async returnCreateCustomer(result: any) {
|
|
this.showCreateCustomer = false;
|
|
if (result != null) {
|
|
this.updateFormCustomer(result);
|
|
}
|
|
}
|
|
|
|
showDialogCreateAddress() {
|
|
if (this.customer == null) {
|
|
this.titleInformation = 'Cadastro de endereços';
|
|
this.messageInformation =
|
|
'Ops! Não existe cliente selecionado para a venda.';
|
|
this.informationDescription =
|
|
'Para cadastrar endereço de entrega é necessário selecionar um cliente.';
|
|
this.showInformation = true;
|
|
return;
|
|
}
|
|
this.showCreateAddress = true;
|
|
}
|
|
|
|
returnShowInformation() {
|
|
this.showInformation = false;
|
|
}
|
|
|
|
async returnCreateAddress(result: any) {
|
|
this.showCreateAddress = false;
|
|
console.log('Retorno cadastro endereço: ' + result);
|
|
if (result != null) {
|
|
localStorage.setItem('address', JSON.stringify(result));
|
|
this.updateFormAddress(result);
|
|
}
|
|
}
|
|
|
|
public updateCart(
|
|
cartId: string
|
|
) {
|
|
console.log('Atualizando carrinho: ' + cartId);
|
|
this.shoppingService.getShopping(cartId).subscribe((shopping) => {
|
|
if (shopping) {
|
|
console.log('Carrinho encontrado: ' + JSON.stringify(shopping));
|
|
const invoiceStore = JSON.parse(
|
|
localStorage.getItem('invoiceStore')
|
|
) as StoreERP;
|
|
const customer = JSON.parse(localStorage.getItem('customer')) as Customer;
|
|
const address = JSON.parse(
|
|
localStorage.getItem('address')
|
|
) as CustomerAddress;
|
|
const paymentPlan = JSON.parse(
|
|
localStorage.getItem('paymentPlan')
|
|
) as PaymentPlan;
|
|
const billing = JSON.parse(localStorage.getItem('billing')) as Billing;
|
|
|
|
shopping.codcli = customer ? customer.customerId : 0;
|
|
shopping.codendentcli = address ? address.idAddress : 0;
|
|
shopping.saleStore = invoiceStore ? invoiceStore.id : this.authService.getStore();
|
|
shopping.codplpag = paymentPlan ? paymentPlan.codplpag : 0;
|
|
shopping.codcob = billing ? billing.codcob : '';
|
|
|
|
this.shoppingService.updateShopping(shopping).subscribe(
|
|
(response) => {
|
|
console.log('Cart updated successfully:', response);
|
|
this.store.dispatch(
|
|
new LoadShoppingAction(this.shoppingService.getCart())
|
|
);
|
|
this.loadFormOrder();
|
|
},
|
|
(error) => {
|
|
console.error('Error updating cart:', error);
|
|
}
|
|
);
|
|
} else {
|
|
console.error('Shopping cart not found for ID:', cartId);
|
|
}
|
|
});
|
|
}
|
|
|
|
showDialogSelectAddress() {
|
|
if (this.customer == null) {
|
|
this.titleInformation = 'Selecionar endereço de entrega';
|
|
this.messageInformation =
|
|
'Ops! Não existe cliente selecionado para a venda.';
|
|
this.informationDescription =
|
|
'Para cadastrar endereço de entrega é necessário selecionar um cliente.';
|
|
this.showInformation = true;
|
|
return;
|
|
}
|
|
this.showSelectAddress = true;
|
|
}
|
|
|
|
returnSelectAddress(result: any) {
|
|
console.log(result);
|
|
this.showSelectAddress = false;
|
|
if (result != null) {
|
|
localStorage.setItem('address', JSON.stringify(result));
|
|
this.updateCart(this.shoppingService.getCart());
|
|
this.updateFormAddress(result);
|
|
this.updateTaxDelivery();
|
|
}
|
|
}
|
|
|
|
updateFormAddress(address: any) {
|
|
if (address.enderent != null) {
|
|
this.formAddress.patchValue({
|
|
address: address.enderent,
|
|
number: address.numeroent,
|
|
neighborhood: address.bairroent,
|
|
complement: address.complementoent,
|
|
city: address.municent,
|
|
state: address.estent,
|
|
zipCode: address.cepent,
|
|
note: address.observacao,
|
|
referencePoint: address.pontorefer,
|
|
});
|
|
} else {
|
|
this.formAddress.patchValue({
|
|
address: address.street,
|
|
number: address.numberAddress,
|
|
neighborhood: address.neighbourhood,
|
|
complement: address.complement,
|
|
city: address.city,
|
|
state: address.state,
|
|
zipCode: address.zipCode,
|
|
note: address.note,
|
|
referencePoint: address.referencePoint,
|
|
});
|
|
}
|
|
}
|
|
|
|
removeSelectAddress() {
|
|
localStorage.removeItem('address');
|
|
this.formAddress.reset();
|
|
this.updateTaxDelivery();
|
|
}
|
|
|
|
confirmCreateOrder() {
|
|
const dataDelivery = JSON.parse(
|
|
localStorage.getItem('dataDelivery')
|
|
) as OrderDelivery;
|
|
this.informationDelivery = '';
|
|
|
|
if (dataDelivery !== null) {
|
|
// const dateDelivery = new Date(dataDelivery.dateDelivery);
|
|
const dateDelivery = new Date(this.formNotes.get('shippingDate').value);
|
|
const dataTexto =
|
|
dateDelivery.getDate().toString().padStart(2, '0') +
|
|
'/' +
|
|
(dateDelivery.getMonth() + 1).toString().padStart(2, '0') +
|
|
'/' +
|
|
dateDelivery.getFullYear().toString();
|
|
|
|
this.informationDelivery = `Pedido com data de entrega para o dia
|
|
${dataTexto}
|
|
- Tipo de entrega: ${dataDelivery.scheduleDelivery ? 'PROGRAMADA' : 'NORMAL'
|
|
}`;
|
|
}
|
|
|
|
this.titleMessage = 'Gerar pedido de venda';
|
|
this.messageConfirmation = 'Confirma a geração do pedido de venda?';
|
|
this.informationDelivery = this.informationDelivery;
|
|
this.textButtonConfirmation = 'Confirma';
|
|
this.openedConfirmationOrder = true;
|
|
}
|
|
|
|
async createOrder(confirmOrder: boolean) {
|
|
this.openedConfirmationOrder = false;
|
|
this.isLoadingOrder = true;
|
|
if (!confirmOrder) {
|
|
this.isLoadingOrder = false;
|
|
return;
|
|
}
|
|
if (!this.orderValid()) {
|
|
this.isLoadingOrder = false;
|
|
return;
|
|
}
|
|
const invoiceStore = JSON.parse(
|
|
localStorage.getItem('invoiceStore')
|
|
) as StoreERP;
|
|
const customer = JSON.parse(localStorage.getItem('customer')) as Customer;
|
|
const preCustomer = JSON.parse(localStorage.getItem('preCustomer'));
|
|
const address = JSON.parse(
|
|
localStorage.getItem('address')
|
|
) as CustomerAddress;
|
|
const paymentPlan = JSON.parse(
|
|
localStorage.getItem('paymentPlan')
|
|
) as PaymentPlan;
|
|
const billing = JSON.parse(localStorage.getItem('billing')) as Billing;
|
|
const partner = JSON.parse(localStorage.getItem('partner')) as PartnerSales;
|
|
|
|
if (invoiceStore === null) {
|
|
this.titleInformation = 'Pedido de venda';
|
|
this.messageInformation = 'Não foi possível gerar o pedido de venda!';
|
|
this.informationDescription =
|
|
'Favor selecione uma filial de venda para o orçamento.';
|
|
this.showInformation = true;
|
|
this.isLoadingOrder = false;
|
|
return;
|
|
}
|
|
if (customer === null) {
|
|
this.titleInformation = 'Pedido de venda';
|
|
this.messageInformation = 'Não foi possível gerar o pedido de venda!';
|
|
this.informationDescription =
|
|
'Favor informe um cliente para gerar o orçamento de venda.';
|
|
this.showInformation = true;
|
|
this.isLoadingOrder = false;
|
|
return;
|
|
}
|
|
|
|
if (this.formNotes.get('shippingDate').value === null) {
|
|
this.titleInformation = 'Pedido de venda';
|
|
this.messageInformation = 'Não foi possível gerar o pedido de venda!';
|
|
this.informationDescription =
|
|
'Favor informe a data de entrega do pedido.';
|
|
this.showInformation = true;
|
|
this.isLoadingOrder = false;
|
|
return;
|
|
}
|
|
|
|
let deliveryTime = 0;
|
|
if (this.authService.getDeliveryTime() != null) {
|
|
deliveryTime = Number.parseInt(this.authService.getDeliveryTime(), 10);
|
|
}
|
|
const deliveryDate = new Date();
|
|
let Days = deliveryDate.getDate() + this.deliveryDays;
|
|
if (this.formNotes.get('shippingPriority').value == 'M') {
|
|
Days = deliveryDate.getDate() + this.retiraPosteriorDays;
|
|
}
|
|
deliveryDate.setDate(Days);
|
|
const deliveryDateOnly = new Date(
|
|
deliveryDate.getFullYear(),
|
|
deliveryDate.getMonth(),
|
|
deliveryDate.getDate()
|
|
);
|
|
|
|
if (
|
|
Date.parse(this.formNotes.get('shippingDate').value) <
|
|
Date.parse(deliveryDateOnly.toDateString())
|
|
) {
|
|
this.titleInformation = 'Pedido de venda';
|
|
this.messageInformation = 'Não foi possível gerar o pedido de venda!';
|
|
this.informationDescription = `Data de entrega inferior ao período mínimo definido para entrega. (${this.deliveryDays} dias)`;
|
|
this.showInformation = true;
|
|
this.isLoadingOrder = false;
|
|
return;
|
|
}
|
|
|
|
if (
|
|
Date.parse(this.formNotes.get('shippingDate').value) ==
|
|
Date.parse(deliveryDate.toDateString()) &&
|
|
this.formNotes.get('scheduleDelivery').value == true
|
|
) {
|
|
this.titleInformation = 'Pedido de venda';
|
|
this.messageInformation =
|
|
'Programação de entrega não permitida para a data de entrega informada!';
|
|
this.informationDescription = `Para realizar a programação da entrega a data de entrega deve superior a ${deliveryTime} dias.`;
|
|
this.showInformation = true;
|
|
this.isLoadingOrder = false;
|
|
return;
|
|
}
|
|
|
|
//validar itens com descrição diferente de ++ com cobrança CHM1
|
|
if (billing.codcob == 'CHM1') {
|
|
const chequeMoradiaItens = this.shoppingItems.filter((item) =>
|
|
item.smallDescription.startsWith('++', 0)
|
|
);
|
|
if (chequeMoradiaItens.length < this.shoppingItems.length) {
|
|
this.titleInformation = 'Pedido de venda';
|
|
this.messageInformation =
|
|
'Existem itens não permitidos para a cobrança utilizada.';
|
|
this.informationDescription = `Existem produtos que não são permitidos serem vendidos na cobrança CHM1.`;
|
|
this.showInformation = true;
|
|
this.isLoadingOrder = false;
|
|
return;
|
|
}
|
|
}
|
|
|
|
const deliveryItens = this.shoppingItems.filter(
|
|
(item) => item.deliveryType === 'EF' || item.deliveryType === 'EN'
|
|
);
|
|
const retiraItens = this.shoppingItems.filter(
|
|
(item) => item.deliveryType === 'RP'
|
|
);
|
|
const taxValue = Number.parseFloat(
|
|
this.formResumeOrder.get('taxValue').value
|
|
);
|
|
const user = this.authService.getUser();
|
|
const supervisorId = this.authService.getSupervisor();
|
|
|
|
const addressCustomer = JSON.parse(localStorage.getItem('address'));
|
|
// const customer = JSON.parse(localStorage.getItem('customer')) as Customer;
|
|
const cityIds = [11289, 11298, 11348, 11280, 11383];
|
|
|
|
let cityId = 0;
|
|
let ibgeCode = 0;
|
|
if (addressCustomer != undefined || addressCustomer != null) {
|
|
cityId = addressCustomer.cityCode;
|
|
ibgeCode = addressCustomer.ibgeCode;
|
|
} else {
|
|
cityId = customer.cityId;
|
|
ibgeCode = Number.parseInt(customer.ibgeCode);
|
|
}
|
|
|
|
const authorizationTax = localStorage.getItem('authorizationTax');
|
|
if (
|
|
deliveryItens.length > 0 &&
|
|
taxValue === 0 &&
|
|
!(
|
|
(supervisorId == 7 ||
|
|
supervisorId == 14 ||
|
|
supervisorId == 21 ||
|
|
supervisorId == 22) &&
|
|
cityIds.includes(cityId)
|
|
) &&
|
|
this.formNotes.get('shippingPriority').value !== 'M' &&
|
|
authorizationTax !== '1'
|
|
) {
|
|
this.showConfirmUser = true;
|
|
|
|
// this.titleInformation = 'Pedido de venda';
|
|
// this.messageInformation = 'Não foi possível gerar o pedido de venda!';
|
|
// this.informationDescription = 'Existem items a serem entregues e não foi informado a taxa de entrega, para concluir o pedido informe a taxa de entrega.';
|
|
// this.showInformation = true;
|
|
this.isLoadingOrder = false;
|
|
return;
|
|
}
|
|
|
|
const authorizationPartner = localStorage.getItem('authorizationPartner');
|
|
if (partner != null && authorizationPartner !== '1') {
|
|
this.userForm.reset();
|
|
this.showAuthPartner = true;
|
|
this.isLoadingOrder = false;
|
|
return;
|
|
}
|
|
|
|
if (
|
|
(deliveryItens.length > 0 || retiraItens.length > 0) &&
|
|
customer.customerId === 1
|
|
) {
|
|
this.titleInformation = 'Pedido de venda';
|
|
this.messageInformation = 'Não foi possível gerar o pedido de venda!';
|
|
this.informationDescription =
|
|
'Pedido para consumidor final com itens a serem entregues ou retira posterior, favor informar um cliente cadastrado.';
|
|
this.showInformation = true;
|
|
this.isLoadingOrder = false;
|
|
return;
|
|
}
|
|
|
|
const itemRI = this.shoppingItems.filter(
|
|
(item) =>
|
|
item.deliveryType === 'RI' && item.stockStore !== invoiceStore.id
|
|
);
|
|
if (itemRI.length > 0) {
|
|
this.titleInformation = 'Pedido de venda';
|
|
this.messageInformation = 'Não foi possível gerar o pedido de venda!';
|
|
this.informationDescription =
|
|
'Existem items com tipo de entrega RETIRA IMEDIATA com a filial retira diferente da filial de faturamento.';
|
|
this.showInformation = true;
|
|
this.isLoadingOrder = false;
|
|
return;
|
|
}
|
|
|
|
const itensNotDelivery = this.shoppingItems.filter(
|
|
(item) => item.stockStore != '4' && item.stockStore != '6'
|
|
);
|
|
|
|
const placeId =
|
|
addressCustomer != undefined || addressCustomer != null
|
|
? addressCustomer.placeId
|
|
: customer.placeId;
|
|
|
|
if (
|
|
this.formNotes.get('shippingPriority').value == 'A' && //itensNotDelivery.length > 0 ||
|
|
(this.totalWeight > 220 ||
|
|
this.placesInterior.filter((p) => p.CODPRACA == placeId).length > 0)
|
|
) {
|
|
this.titleInformation = 'Pedido de venda';
|
|
this.messageInformation =
|
|
'Pedido não atende as regras para entrega DELIVERY!';
|
|
this.informationDescription =
|
|
'Pedido excede a 200 kg ou praça de entrega fora da região metropolitana (BELEM e ANANINDEUA).';
|
|
this.showInformation = true;
|
|
this.isLoadingOrder = false;
|
|
return;
|
|
}
|
|
|
|
if (
|
|
this.formNotes.get('shippingPriority').value == 'M' &&
|
|
this.storePlaceSelected == null
|
|
) {
|
|
this.showDeliveryStore = true;
|
|
return;
|
|
}
|
|
|
|
const idAddress = address == null ? 0 : address.idAddress;
|
|
const itensCart = await this.getItens();
|
|
let preCadastroDocument = '';
|
|
let preCadastroName = '';
|
|
let preCadastroPhone = '';
|
|
if (preCustomer !== null) {
|
|
preCadastroDocument = preCustomer.document;
|
|
preCadastroName = preCustomer.name;
|
|
preCadastroPhone = preCustomer.phone;
|
|
}
|
|
const cart: CartModel = {
|
|
id: this.shoppingService.getCart(),
|
|
userId: this.authService.getUser(),
|
|
saleStore: invoiceStore.id,
|
|
idCustomer: customer.customerId,
|
|
idPaymentPlan: paymentPlan.codplpag,
|
|
idBilling: billing.codcob,
|
|
idSeller: this.authService.getSeller(),
|
|
idProfessional: partner != null ? partner.id : 0,
|
|
scheduleDelivery: this.formNotes.get('scheduleDelivery').value,
|
|
shippingDate: this.formNotes.get('shippingDate').value,
|
|
shippingPriority: this.formNotes.get('shippingPriority').value,
|
|
idStorePlace:
|
|
this.formNotes.get('shippingPriority').value == 'M'
|
|
? this.storePlaceSelected.id
|
|
: null,
|
|
shippingValue: this.formResumeOrder.get('taxValue').value,
|
|
idAddress,
|
|
notation1: this.formNotes.get('notesText1').value,
|
|
notation2: this.formNotes.get('notesText2').value,
|
|
notation3: '',
|
|
deliveryNote1: this.formNotes.get('notesDeliveryText1').value,
|
|
deliveryNote2: this.formNotes.get('notesDeliveryText2').value,
|
|
deliveryNote3: this.formNotes.get('notesDeliveryText3').value,
|
|
itens: itensCart,
|
|
preCustomerDocument:
|
|
customer.customerId === 1 ? preCadastroDocument : null,
|
|
preCustomerName: customer.customerId === 1 ? preCadastroName : null,
|
|
preCustomerPhone: customer.customerId === 1 ? preCadastroPhone : null,
|
|
carrierId: this.formResumeOrder.get('carrierId').value,
|
|
};
|
|
|
|
this.orderService
|
|
.getProductsWithoutTax(localStorage.getItem('cart'), customer.customerId)
|
|
.pipe(
|
|
map((products) => {
|
|
if (products.length > 0) {
|
|
this.productsWithoutTax = products;
|
|
this.isLoadingOrder = false;
|
|
this.showProductsWithoutTax = true;
|
|
} else {
|
|
const result$ = this.orderService.create(cart);
|
|
result$
|
|
.pipe(
|
|
map((result) => {
|
|
if (result.success) {
|
|
this.orderNumber = result.data.idOrder;
|
|
this.orderStatus = result.data.status;
|
|
this.openedModelPrintOrder = true;
|
|
|
|
/*this.titleInformation = 'Gravar pedido de venda';
|
|
this.messageInformation = 'Pedido de venda gerado com sucesso!';
|
|
this.informationDescription = `Número do pedido gerado: ${result.data.idOrder} com a posição ${result.data.status}`;
|
|
this.isLoadingOrder = false;
|
|
this.urlPrintOrder = 'http://10.1.1.205:8068/Viewer/{action}?orderId=' + this.orderNumber;
|
|
this.openedPrintOrder = true;
|
|
this.showInformationCreateOrder = true; */
|
|
// this.closeSale();
|
|
}
|
|
}),
|
|
catchError((err) => {
|
|
console.log(err);
|
|
this.titleInformation = 'Gravar pedido de venda';
|
|
this.messageInformation =
|
|
'Ops, houve um problema na geração do pedido de venda.';
|
|
this.informationDescription = err.error.message;
|
|
this.showInformation = true;
|
|
this.isLoadingOrder = false;
|
|
return of();
|
|
})
|
|
)
|
|
.subscribe();
|
|
}
|
|
})
|
|
)
|
|
.subscribe();
|
|
}
|
|
|
|
orderValid() {
|
|
const customer = JSON.parse(localStorage.getItem('customer')) as Customer;
|
|
if (customer == null) {
|
|
this.titleInformation = 'Gravar pedido de venda';
|
|
this.messageInformation =
|
|
'Atenção! Não foi informado um cliente para a venda.';
|
|
this.informationDescription =
|
|
'Para gerar um pedido de venda é necessário selecionar um cliente.';
|
|
this.showInformation = true;
|
|
return false;
|
|
}
|
|
const address = JSON.parse(
|
|
localStorage.getItem('address')
|
|
) as CustomerAddress;
|
|
const paymentPlan = JSON.parse(
|
|
localStorage.getItem('paymentPlan')
|
|
) as PaymentPlan;
|
|
if (paymentPlan == null) {
|
|
this.titleInformation = 'Gravar pedido de venda';
|
|
this.messageInformation =
|
|
'Atenção! Não foi informado um plano de pagamento para a venda.';
|
|
this.informationDescription =
|
|
'Para gerar um pedido de venda é necessário selecionar um plano de pagamento para o pedido.';
|
|
this.showInformation = true;
|
|
return false;
|
|
}
|
|
const billing = JSON.parse(localStorage.getItem('billing')) as Billing;
|
|
// Validar se foi informada a cobrança para venda //
|
|
if (billing == null) {
|
|
this.titleInformation = 'Gravar pedido de venda';
|
|
this.messageInformation =
|
|
'Atenção! Não foi informado uma cobrança para a venda.';
|
|
this.informationDescription =
|
|
'Para gerar um pedido de venda é necessário selecionar uma cobrança.';
|
|
this.showInformation = true;
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
editItem(item: any) {
|
|
console.log(item);
|
|
this.itemSelect = item;
|
|
}
|
|
|
|
selectItem(dataItem: any) {
|
|
console.log('cart item selecionado : ' + JSON.stringify(dataItem));
|
|
this.shoppingService.setShoppingItem(dataItem);
|
|
}
|
|
|
|
goSalesHome() {
|
|
this.router.navigate(['sales/home']);
|
|
}
|
|
|
|
showModalProduct(item: ShoppingItem) {
|
|
this.productService
|
|
.getSaleProduct(this.authService.getStore(), item.idProduct)
|
|
.subscribe((product) => {
|
|
console.log(product);
|
|
let resultProduct: any;
|
|
const dialogRef: DialogRef = this.dialogService.open({
|
|
content: ProductModalComponent,
|
|
});
|
|
const productInfo = dialogRef.content.instance as ProductModalComponent;
|
|
productInfo.product = product;
|
|
productInfo.shoppingItem = item;
|
|
dialogRef.result.subscribe((result) => {
|
|
if (result instanceof DialogCloseResult) {
|
|
console.log('WindowCloseResult', result);
|
|
} else {
|
|
console.log('action', result);
|
|
resultProduct = JSON.stringify(result);
|
|
console.log(resultProduct);
|
|
this.calculateTaxDelivery(true);
|
|
this.messageService.showMessage(JSON.parse(resultProduct).message);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
logout() {
|
|
this.shoppingService.cancelShopping();
|
|
this.authService.logout();
|
|
}
|
|
|
|
closeDialogDiscountOrder() {
|
|
this.showDialogDiscountOrder = false;
|
|
}
|
|
|
|
confirmDiscountOrder() {
|
|
this.formResumeOrder.patchValue({
|
|
discount: this.formDiscountOrder.get('discountValue').value,
|
|
});
|
|
this.showDialogDiscountOrder = false;
|
|
const discountValue = Number.parseFloat(
|
|
this.formResumeOrder.get('discount').value
|
|
);
|
|
const initialValue = 0;
|
|
const orderValue = this.shoppingItems
|
|
.filter((i) => i.promotion == null || i.promotion === 0)
|
|
.reduce(
|
|
(previousValue, item) => previousValue + item.listPrice * item.quantity,
|
|
initialValue
|
|
);
|
|
let percentOrder = (discountValue / orderValue) * 100;
|
|
console.log('Percentual do pedido: ' + percentOrder);
|
|
if (this.percentSeller < percentOrder) {
|
|
this.openedAuthUser = true;
|
|
return;
|
|
}
|
|
if (discountValue <= 0.01) {
|
|
percentOrder = 0;
|
|
}
|
|
const order: OrderDiscount = {
|
|
id: this.shoppingService.getCart(),
|
|
percentDiscount: percentOrder,
|
|
idUserAuth: this.authService.getUser(),
|
|
};
|
|
this.store.dispatch(new ApplyDiscountOrderAction(order));
|
|
this.store.dispatch(new LoadShoppingAction(this.shoppingService.getCart()));
|
|
this.loadFormOrder();
|
|
}
|
|
|
|
applyDiscountOrder() {
|
|
const payment = JSON.parse(
|
|
localStorage.getItem('paymentPlan')
|
|
) as PaymentPlan;
|
|
if (payment == null) {
|
|
this.titleInformation = 'Desconto para o pedido';
|
|
this.messageInformation =
|
|
'Venda sem plano de pagamento informado, desconto não permitido!';
|
|
this.informationDescription =
|
|
'Selecione primeiro um plano de pagamento para aplicar um desconto!';
|
|
this.showInformation = true;
|
|
return;
|
|
}
|
|
|
|
this.authService.getUser();
|
|
if (payment.numdias > 30 && !this.authService.isManager()) {
|
|
this.titleInformation = 'Desconto para o pedido';
|
|
this.messageInformation =
|
|
'Plano de pagamento parcelado, desconto não permitido!';
|
|
this.informationDescription =
|
|
'Desconto autorizado apenas para venda a vista ou em 1x no cartão!';
|
|
this.showInformation = true;
|
|
return;
|
|
}
|
|
|
|
this.userManager = false; //this.authService.isManager();
|
|
let initialValue = 0;
|
|
const productValue = this.shoppingItems
|
|
.filter((i) => i.promotion == null || i.promotion === 0)
|
|
.reduce(
|
|
(previousValue, item) => previousValue + item.listPrice * item.quantity,
|
|
initialValue
|
|
);
|
|
initialValue = 0;
|
|
const profit = this.shoppingItems
|
|
.filter((i) => i.promotion == null || i.promotion === 0)
|
|
.reduce(
|
|
(previousValue, item) => previousValue + item.cost * item.quantity,
|
|
initialValue
|
|
);
|
|
let discount =
|
|
this.formResumeOrder.get('discount').value != null
|
|
? Number.parseFloat(this.formResumeOrder.get('discount').value)
|
|
: 0;
|
|
// const productValue = (this.shopping.vlpedido + this.shopping.vldesconto);
|
|
// const profit = (((productValue - this.shopping.vlcustofin)
|
|
// / productValue) * 100).toFixed(2);
|
|
console.log('CABECALHO DA VENDA: ' + JSON.stringify(this.shopping));
|
|
if (discount === 0) {
|
|
discount = this.shopping.vldesconto;
|
|
}
|
|
console.log(`Total do pedido: ${productValue}`);
|
|
console.log(`valor de desconto: ${discount}`);
|
|
const percentProfit = (
|
|
((productValue - profit) / productValue) *
|
|
100
|
|
).toFixed(2);
|
|
const percent = Number.parseFloat(
|
|
((discount / productValue) * 100).toFixed(2)
|
|
);
|
|
const netValue = productValue - discount;
|
|
const netProfit = (((netValue - profit) / netValue) * 100).toFixed(2);
|
|
console.log(`valor profit: ${profit}`);
|
|
console.log(`valor de percent: ${percent}`);
|
|
console.log(`valor de netValue: ${netValue}`);
|
|
console.log(`valor de netProfit: ${netProfit}`);
|
|
|
|
this.formDiscountOrder.patchValue({
|
|
value: Number.parseFloat(productValue.toFixed(2)),
|
|
profit: percentProfit,
|
|
discountValue: discount,
|
|
discount: percent,
|
|
netValue,
|
|
netProfit,
|
|
});
|
|
if (productValue > 0) {
|
|
this.showDialogDiscountOrder = true;
|
|
} else {
|
|
this.titleInformation = 'Pedido de venda';
|
|
this.messageInformation =
|
|
'Não existem itens disponíveis para aplicar desconto !';
|
|
this.informationDescription =
|
|
'Não existem itens adicionados no carrinho ou todos os itens estão em promoção!';
|
|
this.showInformation = true;
|
|
return;
|
|
}
|
|
}
|
|
|
|
calcDiscountOrderValue() {
|
|
let initialValue = 0;
|
|
const profit = this.shoppingItems
|
|
.filter((i) => i.promotion == null || i.promotion === 0)
|
|
.reduce(
|
|
(previousValue, item) => previousValue + item.cost * item.quantity,
|
|
initialValue
|
|
);
|
|
initialValue = 0;
|
|
const valorTotal = this.shoppingItems
|
|
.filter((i) => i.promotion == null || i.promotion === 0)
|
|
.reduce(
|
|
(previousValue, item) => previousValue + item.listPrice * item.quantity,
|
|
initialValue
|
|
);
|
|
console.log(JSON.stringify(this.shoppingItems));
|
|
if (valorTotal === 0) {
|
|
return;
|
|
}
|
|
const percent = this.formDiscountOrder.get('discount').value;
|
|
const discountValue = Number.parseFloat(
|
|
(valorTotal * (percent / 100)).toFixed(2)
|
|
);
|
|
const salePrice = Number.parseFloat(
|
|
(valorTotal - discountValue).toFixed(2)
|
|
);
|
|
const netProfit = (((salePrice - profit) / salePrice) * 100).toFixed(2);
|
|
this.formDiscountOrder.patchValue({
|
|
discountValue,
|
|
netValue: salePrice,
|
|
netProfit,
|
|
});
|
|
}
|
|
|
|
calcPercentOrderDiscount() {
|
|
const discountValue = this.formDiscountOrder.get('discountValue').value;
|
|
let initialValue = 0;
|
|
const profit = this.shoppingItems
|
|
.filter((i) => i.promotion == null || i.promotion === 0)
|
|
.reduce(
|
|
(previousValue, item) => previousValue + item.cost * item.quantity,
|
|
initialValue
|
|
);
|
|
const valorTotal = this.shoppingItems.reduce((acumulador, item) => {
|
|
return acumulador + item.quantity * item.listPrice;
|
|
}, 0);
|
|
const percent = Number.parseFloat(
|
|
((discountValue / valorTotal) * 100).toFixed(2)
|
|
);
|
|
const salePrice = Number.parseFloat(
|
|
(valorTotal - discountValue).toFixed(2)
|
|
);
|
|
const netProfit = (((salePrice - profit) / salePrice) * 100).toFixed(2);
|
|
this.formDiscountOrder.patchValue({
|
|
inputDiscount: percent,
|
|
discount: percent,
|
|
discountValue,
|
|
netValue: salePrice,
|
|
netProfit,
|
|
});
|
|
}
|
|
|
|
selectModelPreOrder() {
|
|
console.log(
|
|
'selectModelPreOrder' + ' - ' + this.formModelPreOrder.get('model').value
|
|
);
|
|
this.modelPrintPreOrder = this.formModelPreOrder.get('model').value;
|
|
this.openedModelPrintPreOrder = true;
|
|
}
|
|
|
|
closeModelPrintPreOrder(action: string) {
|
|
console.log(
|
|
`Dialog result: ${action}` +
|
|
' - ' +
|
|
this.formModelPreOrder.get('model').value
|
|
);
|
|
this.openedModelPrintPreOrder = false;
|
|
this.modelPrintPreOrder = this.formModelPreOrder.get('model').value;
|
|
if (action === 'Sim') {
|
|
this.openPrintPreOrder();
|
|
}
|
|
}
|
|
|
|
closeModelPrintOrder(action: string) {
|
|
this.openedModelPrintOrder = false;
|
|
this.modelPrintOrder = this.formModelOrder.get('model').value;
|
|
if (action === 'Sim') {
|
|
this.openPrintOrder();
|
|
}
|
|
|
|
this.titleInformation = 'Gravar pedido de venda';
|
|
this.messageInformation = 'Pedido de venda gerado com sucesso!';
|
|
this.informationDescription = `Número do pedido gerado: ${this.orderNumber} com a posição ${this.orderStatus}`;
|
|
this.showInformationCreateOrder = true;
|
|
}
|
|
|
|
closeModelPreCustomer(action: string) {
|
|
console.log(
|
|
`Dialog result: ${action}` + ' - ' + this.formPreCustomer.value
|
|
);
|
|
this.openedPreCustomer = false;
|
|
if (action === 'Sim') {
|
|
if (this.customer !== undefined && this.customer.customerId !== 1) {
|
|
localStorage.setItem('customer', JSON.stringify(this.customer));
|
|
this.updateCart(this.shoppingService.getCart());
|
|
this.updateFormCustomer(this.customer);
|
|
} else {
|
|
localStorage.setItem(
|
|
'preCustomer',
|
|
JSON.stringify(this.formPreCustomer.value)
|
|
);
|
|
this.subscriptionCustomer = this.customerService
|
|
.getCustomerByQuery('customerId', '1')
|
|
.subscribe((data) => {
|
|
if (data.length > 0) {
|
|
this.updateFormCustomer(data[0]);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
// Método para definir se é mobile e ajustar o modal
|
|
checkDevice() {
|
|
this.isMobile = window.innerWidth <= 768; // Define se é mobile
|
|
|
|
if (this.isMobile) {
|
|
this.windowWidth = window.innerWidth * 0.9; // 90% da largura da tela
|
|
this.windowHeight = window.innerHeight * 0.8; // 80% da altura da tela
|
|
this.windowTop = (window.innerHeight - this.windowHeight) / 2;
|
|
this.windowLeft = (window.innerWidth - this.windowWidth) / 2;
|
|
} else {
|
|
this.windowWidth = 600;
|
|
this.windowHeight = 500;
|
|
this.windowTop = 100;
|
|
this.windowLeft = (window.innerWidth - this.windowWidth) / 2;
|
|
}
|
|
}
|
|
|
|
openPrintPreOrder() {
|
|
// this.urlPrintPreOrder = 'http://localhost:52986//Viewer/{action}?order=' +
|
|
this.urlPrintPreOrder =
|
|
'http://172.35.0.219:8068/Viewer/{action}?order=' +
|
|
this.preOrderNumber +
|
|
'&model=' +
|
|
this.modelPrintPreOrder;
|
|
this.titleInformation = 'Gravar orçamento de venda';
|
|
this.messageInformation = 'Orçamento gerado com sucesso!';
|
|
this.informationDescription = `Número do orçamento gerado: ${this.preOrderNumber}`;
|
|
this.showInformationCreateOrder = true;
|
|
this.openedPrintPreOrder = true;
|
|
}
|
|
|
|
openPrintOrder() {
|
|
// this.urlPrintPreOrder = 'http://localhost:52986//Viewer/{action}?order=' +
|
|
this.urlPrintOrder =
|
|
'http://172.35.0.219:8068/Viewer/{action}?orderId=' +
|
|
this.orderNumber +
|
|
'&model=' +
|
|
this.modelPrintOrder;
|
|
this.titleInformation = 'Gravar pedido de venda';
|
|
this.messageInformation = 'Pedido de venda gerado com sucesso!';
|
|
this.informationDescription = `Número do orçamento gerado: ${this.orderNumber}`;
|
|
this.showInformationCreateOrder = true;
|
|
this.openedPrintOrder = true;
|
|
// this.windowState = 'default';
|
|
this.checkDevice();
|
|
}
|
|
|
|
async searchCustomer() {
|
|
const document = this.formPreCustomer.get('document').value;
|
|
this.searchCustomerSubscription = this.customerService
|
|
.getCustomerbyCpf(document)
|
|
.subscribe((result) => {
|
|
if (result.data != null) {
|
|
this.formPreCustomer.patchValue({
|
|
document: result.data.cpfCnpj,
|
|
name: result.data.name,
|
|
phone: result.data.cellPhone,
|
|
});
|
|
this.customer = result.data;
|
|
}
|
|
});
|
|
}
|
|
|
|
showPreCustomer() {
|
|
let customer: any;
|
|
const dataCustomer = localStorage.getItem('customer');
|
|
customer = dataCustomer !== undefined ? JSON.parse(dataCustomer) : null;
|
|
let preCustomer: any;
|
|
if (localStorage.getItem('preCustomer')) {
|
|
preCustomer = JSON.parse(localStorage.getItem('preCustomer'));
|
|
}
|
|
this.formPreCustomer.reset();
|
|
if (
|
|
customer === undefined ||
|
|
customer === null ||
|
|
customer.customerId === 1
|
|
) {
|
|
if (preCustomer !== undefined && preCustomer !== null) {
|
|
this.formPreCustomer.patchValue({
|
|
document: preCustomer.document,
|
|
name: preCustomer.name,
|
|
phone: preCustomer.phone,
|
|
});
|
|
}
|
|
this.openedPreCustomer = true;
|
|
} else {
|
|
this.titleInformation = 'Pedido de venda';
|
|
this.messageInformation = 'Pedido / Orçamento já com cliente informado!';
|
|
this.informationDescription =
|
|
'Não é permitido realizar um pré-cadastro com cliente informado no pedido!';
|
|
this.showInformation = true;
|
|
return;
|
|
}
|
|
}
|
|
|
|
isPreCustomer() {
|
|
return localStorage.getItem('preCustomer') !== null;
|
|
}
|
|
|
|
closeProductsWithoutTax() {
|
|
this.showProductsWithoutTax = false;
|
|
}
|
|
|
|
confirmationUser() {
|
|
this.showConfirmUser = true;
|
|
}
|
|
|
|
closeConfirmUser() {
|
|
const authUser: AuthUser = {
|
|
email: this.userForm.get('userName').value,
|
|
password: this.userForm.get('password').value,
|
|
};
|
|
|
|
this.authService
|
|
.authenticate(authUser)
|
|
.pipe(
|
|
map((response) => {
|
|
if (!response.success) {
|
|
this.titleInformation = 'Autorizar pedido sem taxa de entrega';
|
|
this.messageInformation = 'Usuário ou senha inválidos!';
|
|
this.informationDescription =
|
|
'Não foi possível autenticar este usuário, verifique seu usuario e senha!';
|
|
this.showInformation = true;
|
|
return;
|
|
}
|
|
|
|
const userDb = JSON.parse(JSON.stringify(response.data));
|
|
|
|
if (userDb.sectorId != userDb.sectorManagerId) {
|
|
console.log(
|
|
`SectorId: ${userDb.sectorId} - SectorManagerId: ${userDb.sectorManagerId}`
|
|
);
|
|
this.titleInformation = 'Autorizar pedido sem taxa de entrega';
|
|
this.messageInformation =
|
|
'Usuário sem permissão para liberar pedido sem taxa de entrega!';
|
|
this.informationDescription =
|
|
'Apenas usuários do setor de GERENTE tem autorização para este processo!';
|
|
this.showConfirmUser = false;
|
|
this.showInformation = true;
|
|
localStorage.removeItem('authorizationTax');
|
|
return;
|
|
}
|
|
|
|
localStorage.setItem('authorizationTax', '1');
|
|
const logOrder: LogOrder = {
|
|
idCart: this.shopping.id,
|
|
idUser: this.authService.getUser(),
|
|
action: 'LIBERAR_TAXA_ENTREGA',
|
|
iduserAuth: userDb.id,
|
|
notation: this.userForm.get('notation').value,
|
|
};
|
|
this.shoppingService.createLogShopping(logOrder);
|
|
this.showConfirmUser = false;
|
|
this.createOrder(true);
|
|
}),
|
|
catchError((error) => {
|
|
this.titleInformation = 'Autorizar pedido sem taxa de entrega';
|
|
this.messageInformation = 'Usuário ou senha inválidos!';
|
|
this.informationDescription =
|
|
'Não foi possível autenticar este usuário, verifique seu usuario e senha!';
|
|
this.showConfirmUser = false;
|
|
this.showInformation = true;
|
|
localStorage.removeItem('authorizationTax');
|
|
return of();
|
|
})
|
|
)
|
|
.subscribe();
|
|
}
|
|
|
|
calculateTaxDelivery(updateTax: boolean) {
|
|
console.log(JSON.stringify(this.shoppingItems));
|
|
const priorityDelivery = this.formNotes.get('shippingPriority').value;
|
|
const itensDelivery = this.shoppingItems.filter(
|
|
(item) => item.deliveryType == 'EN' || item.deliveryType == 'EF'
|
|
);
|
|
|
|
console.log('calculateTaxDelivery: ' + JSON.stringify(itensDelivery));
|
|
|
|
if (itensDelivery.length === 0 || priorityDelivery === 'M') {
|
|
this.formResumeOrder.patchValue({
|
|
taxValue: 0,
|
|
});
|
|
this.returnConfirmationTax(true);
|
|
return;
|
|
}
|
|
|
|
// Armazena o valor atual antes da chamada
|
|
const currentTaxValue = Number.parseFloat(
|
|
this.formResumeOrder.get('taxValue').value
|
|
);
|
|
|
|
const customer = JSON.parse(localStorage.getItem('customer')) as Customer;
|
|
const addressCustomer = JSON.parse(localStorage.getItem('address'));
|
|
const invoiceStore = JSON.parse(localStorage.getItem('invoiceStore'));
|
|
const dataDelivery = JSON.parse(
|
|
localStorage.getItem('dataDelivery')
|
|
) as OrderDelivery;
|
|
|
|
let storeId =
|
|
invoiceStore == null ? this.authService.getStore() : invoiceStore;
|
|
let cityId = 0;
|
|
let ibgeCode = 0;
|
|
const cartId = localStorage.getItem('cart');
|
|
|
|
if (addressCustomer != undefined && addressCustomer != null) {
|
|
cityId = addressCustomer.cityCode;
|
|
ibgeCode = addressCustomer.ibgeCode;
|
|
} else {
|
|
cityId = customer.cityId;
|
|
ibgeCode = Number.parseInt(customer.ibgeCode);
|
|
}
|
|
const dataDeliveryTax = {
|
|
cartId: cartId,
|
|
cityId: cityId,
|
|
ibgeCode: ibgeCode,
|
|
priorityDelivery: priorityDelivery,
|
|
};
|
|
|
|
this.shoppingService.calculateDeliveryTax(dataDeliveryTax).subscribe(
|
|
(result) => {
|
|
this.dataDeliveryTax = result;
|
|
console.log(JSON.stringify(this.shopping));
|
|
if (result.length > 0) {
|
|
// (updateTax || this.shopping.vltaxaentrega == undefined || this.shopping.vltaxaentrega == 0)) {
|
|
if (this.shopping.codtabelafrete > 0) {
|
|
const deliveryTaxSelected = result.find(
|
|
(c) => c.id == this.shopping.codtabelafrete
|
|
);
|
|
if (deliveryTaxSelected != null) {
|
|
this.formResumeOrder.patchValue({
|
|
taxValue: deliveryTaxSelected.deliveryValue,
|
|
deliveryTaxId: deliveryTaxSelected.id,
|
|
carrierId: deliveryTaxSelected.carrierId,
|
|
});
|
|
} else {
|
|
this.formResumeOrder.patchValue({
|
|
taxValue: result[0].deliveryValue,
|
|
deliveryTaxId: result[0].id,
|
|
carrierId: result[0].carrierId,
|
|
});
|
|
}
|
|
} else {
|
|
this.formResumeOrder.patchValue({
|
|
taxValue: result[0].deliveryValue,
|
|
deliveryTaxId: result[0].id,
|
|
carrierId: result[0].carrierId,
|
|
});
|
|
}
|
|
this.returnConfirmationTax(true);
|
|
}
|
|
},
|
|
(error) => {
|
|
// Em caso de erro, notifica o usuário e mantém o valor original
|
|
console.error('Erro ao calcular a taxa de entrega:', error);
|
|
this.showErrorMessage(
|
|
'Ocorreu um erro ao calcular a taxa de entrega. Por favor, tente novamente.'
|
|
);
|
|
this.formResumeOrder.patchValue({
|
|
taxValue: currentTaxValue,
|
|
});
|
|
console.error('Erro ao calcular taxa de entrega:', error);
|
|
}
|
|
);
|
|
}
|
|
|
|
selectDeliveryTax(data: any) {
|
|
const dataDeliveryTax = data.selectedRows[0].dataItem as DeliveryTaxTable;
|
|
this.formResumeOrder.patchValue({
|
|
taxValue: dataDeliveryTax.deliveryValue,
|
|
deliveryTaxId: dataDeliveryTax.id,
|
|
carrierId: dataDeliveryTax.carrierId,
|
|
});
|
|
this.returnConfirmationTax(true);
|
|
this.showSelectDeliveryTax = false;
|
|
}
|
|
|
|
closeAuthPartner(action: boolean) {
|
|
if (!action) {
|
|
this.showAuthPartner = false;
|
|
return;
|
|
}
|
|
const authUser: AuthUser = {
|
|
email: this.userForm.get('userName').value,
|
|
password: this.userForm.get('password').value,
|
|
};
|
|
|
|
this.authService
|
|
.authenticate(authUser)
|
|
.pipe(
|
|
map((response) => {
|
|
if (!response.success) {
|
|
this.titleInformation = 'Autorizar parceiro da venda';
|
|
this.messageInformation = 'Usuário ou senha inválidos!';
|
|
this.informationDescription =
|
|
'Não foi possível autenticar este usuário, verifique seu usuario e senha!';
|
|
this.showAuthPartner = false;
|
|
this.showInformation = true;
|
|
localStorage.removeItem('authorizationPartner');
|
|
return;
|
|
}
|
|
|
|
const userDb = JSON.parse(JSON.stringify(response.data));
|
|
|
|
if (userDb.sectorId != userDb.sectorManagerId) {
|
|
console.log(
|
|
`SectorId: ${userDb.sectorId} - SectorManagerId: ${userDb.sectorManagerId}`
|
|
);
|
|
this.titleInformation = 'Autorizar parceiro da venda';
|
|
this.messageInformation =
|
|
'Usuário sem permissão para liberar parceiro da venda!';
|
|
this.informationDescription =
|
|
'Apenas usuários do setor de GERENTE tem autorização para este processo!';
|
|
this.showAuthPartner = false;
|
|
this.showInformation = true;
|
|
localStorage.removeItem('authorizationPartner');
|
|
return;
|
|
}
|
|
localStorage.setItem('authorizationPartner', '1');
|
|
const logOrder: LogOrder = {
|
|
idCart: this.shopping.id,
|
|
idUser: this.authService.getUser(),
|
|
action: 'AUTORIZAR_PARCEIRO_VENDA',
|
|
iduserAuth: userDb.id,
|
|
notation: '',
|
|
};
|
|
this.shoppingService.createLogShopping(logOrder);
|
|
this.showAuthPartner = false;
|
|
this.createOrder(true);
|
|
}),
|
|
catchError((error) => {
|
|
this.titleInformation = 'Autorizar parceiro da venda';
|
|
this.messageInformation = 'Usuário ou senha inválidos!';
|
|
this.informationDescription =
|
|
'Não foi possível autenticar este usuário, verifique seu usuario e senha!';
|
|
this.showAuthPartner = false;
|
|
this.showInformation = true;
|
|
localStorage.removeItem('authorizationPartner');
|
|
return of();
|
|
})
|
|
)
|
|
.subscribe();
|
|
}
|
|
|
|
setStorePlace(storePlace: any) {
|
|
console.log(storePlace);
|
|
this.storePlaceSelected = storePlace;
|
|
}
|
|
|
|
closeDeliveryStore(action: boolean) {
|
|
this.showDeliveryStore = false;
|
|
if (action == false) {
|
|
this.isLoadingOrder = false;
|
|
return;
|
|
}
|
|
if (this.storePlaceSelected == null) {
|
|
this.titleInformation = 'Selecionar loja de retirada';
|
|
this.messageInformation =
|
|
'Favor informar a loja que o cliente deseja retirar a mercadoria!';
|
|
this.informationDescription = '';
|
|
this.showInformation = true;
|
|
this.isLoadingOrder = false;
|
|
return;
|
|
}
|
|
|
|
this.createOrder(true);
|
|
}
|
|
|
|
calculateDeliveryTime() {
|
|
const customer: Customer = JSON.parse(localStorage.getItem('customer'));
|
|
const address: CustomerAddress = JSON.parse(
|
|
localStorage.getItem('address')
|
|
);
|
|
const invoiceStore = JSON.parse(
|
|
localStorage.getItem('invoiceStore')
|
|
) as StoreERP;
|
|
const cartId = localStorage.getItem('cart');
|
|
|
|
const saleDate = new Date();
|
|
const saleYear = saleDate.getFullYear();
|
|
const saleMonth = saleDate.getMonth() + 1;
|
|
const day = saleDate.getDate();
|
|
const stringDate =
|
|
('00' + day).slice(-2) +
|
|
'-' +
|
|
('00' + saleMonth).slice(-2) +
|
|
'-' +
|
|
saleYear;
|
|
console.log('Data atual: ' + stringDate);
|
|
let deliveryDays = 0;
|
|
this.shoppingService
|
|
.getDeliveryDays(
|
|
stringDate,
|
|
invoiceStore == null ? this.authService.getStore() : invoiceStore.id,
|
|
address != null
|
|
? address.placeId
|
|
: customer != null
|
|
? customer.placeId
|
|
: 0,
|
|
cartId
|
|
)
|
|
.pipe(map((result) => (deliveryDays = result.deliveryDays)))
|
|
.subscribe();
|
|
return deliveryDays;
|
|
}
|
|
|
|
@HostListener('window:resize', ['$event'])
|
|
onResize(event?: Event) {
|
|
this.checkDevice();
|
|
}
|
|
}
|