Remove order-creation logic from component

This commit is contained in:
Rene Vergara 2023-06-21 15:21:37 -05:00
parent cb8df58cfc
commit 9a501e9665
Signed by: pitmutt
GPG key ID: 65122AD495A7F5B2
2 changed files with 270 additions and 455 deletions

View file

@ -24,11 +24,11 @@
<div style="height: 50px;"> <div style="height: 50px;">
</div> </div>
<div style="font-weight: 700; <div style="font-weight: 700;
font-size: 25px; fonT-size: 25px;
text-align: center;"> text-align: center;">
{{ vE.pmtservicePmtsrvNot }}<br> {{ vE.pmtservicePmtsrvNot }}<br>
{{ vE.pmtserviceEnabledFor }}<br> {{ vE.pmtserviceEnabledFor }}<br>
{{ owner.name}} {{ shop }}
</div> </div>
<div style="height: 40px;"> <div style="height: 40px;">
</div> </div>

View file

@ -4,8 +4,6 @@ import { HttpClient, HttpParams, HttpHeaders } from "@angular/common/http";
import { DomSanitizer, SafeUrl } from '@angular/platform-browser'; import { DomSanitizer, SafeUrl } from '@angular/platform-browser';
import { PmtData } from "./pmtservice.model"; import { PmtData } from "./pmtservice.model";
import { XeroInvoice } from "./xeroinvoice.model"; import { XeroInvoice } from "./xeroinvoice.model";
import { Owner } from '../owner.model';
// import { Item } from '../items/item.model'
import { Order } from '../order/order.model' import { Order } from '../order/order.model'
import { ConfigData } from '../configdata'; import { ConfigData } from '../configdata';
import { faCheck, faHourglass } from '@fortawesome/free-solid-svg-icons'; import { faCheck, faHourglass } from '@fortawesome/free-solid-svg-icons';
@ -32,6 +30,7 @@ export class PmtserviceComponent implements OnInit {
beUrl = ConfigData.Be_URL; beUrl = ConfigData.Be_URL;
private reqHeaders: HttpHeaders = new HttpHeaders(); private reqHeaders: HttpHeaders = new HttpHeaders();
public shop: string = '';
public pmtData : PmtData = { public pmtData : PmtData = {
ownerId :'', ownerId :'',
invoice: '', invoice: '',
@ -54,25 +53,8 @@ export class PmtserviceComponent implements OnInit {
inv_ProcDate : new Date() inv_ProcDate : new Date()
}; };
public owner: Owner = {
_id: '',
address: '',
name: '',
currency: 'usd',
tax: false,
taxValue: 0,
vat: false,
vatValue: 0,
paid: false,
zats: false,
invoices: false,
expiration: new Date(Date.now()).toISOString(),
payconf: false,
crmToken: '',
viewkey: ''
};
public order: Order = { public order: Order = {
_id : '', _id : '',
address: '', address: '',
session: '', session: '',
@ -107,10 +89,10 @@ public order: Order = {
name: string = ''; name: string = '';
error: boolean = false; error: boolean = false;
orderId : string = ''; orderId : string = '';
// ------------------------------------- // -------------------------------------
// Language Support // Language Support
// //
vE = { vE = {
pmtserviceInvalidOwnerid : '', pmtserviceInvalidOwnerid : '',
pmtserviceNotservClose : '', pmtserviceNotservClose : '',
pmtserviceNotservError : '', pmtserviceNotservError : '',
@ -150,13 +132,15 @@ vE = {
pmtserviceCopyAddress : '', pmtserviceCopyAddress : '',
pmtserviceCopyAmount : '', pmtserviceCopyAmount : '',
pmtserviceCopyMemo : '' pmtserviceCopyMemo : ''
} }
// //
constructor(private activatedRoute : ActivatedRoute, constructor(private activatedRoute : ActivatedRoute,
private http : HttpClient, private http : HttpClient,
private sanitizer: DomSanitizer, private sanitizer: DomSanitizer,
private notifierService : NotifierService, private notifierService : NotifierService,
private languageService : LanguageService ) {} private languageService : LanguageService ){
}
ngOnInit() { ngOnInit() {
var auth = 'Basic ' + Buffer.from(ConfigData.UsrPwd).toString('base64'); var auth = 'Basic ' + Buffer.from(ConfigData.UsrPwd).toString('base64');
@ -173,172 +157,21 @@ vE = {
} }
getInvoiceData( reqData : PmtData ) { getInvoiceData( reqData : PmtData ) {
//this.getXeroInvoiceData( reqData );
// let obs = this.http.post<{reportType: number, order: Order, shop: string}>
// Verify owner id ( Status = 1 if not exists ) (this.beUrl+'invdata',
// ( Status = 2 if service not available for user ) {payload: reqData},
// {headers: this.reqHeaders, observe: 'response' }
// console.log('getOwner -> '+ reqData.ownerId);
// console.log('received amount -> ' + reqData.amount);
const ownParams = new HttpParams().append('id', reqData.ownerId);
let obs = this.http.get<{message:string, owner: any}>
( this.beUrl+'ownerid',
{ headers: this.reqHeaders,
params: ownParams,
observe: 'response'});
obs.subscribe((OwnerDataResponse) => {
//console.log('api/getowner', OwnerDataResponse.status);
if (OwnerDataResponse.status == 200) {
this.owner = OwnerDataResponse.body!.owner;
console.log('Owner => ' + this.owner.name );
//
// ==> remove "== false" for production enviroment
//
if ( this.owner.invoices ) {
// process data
console.log("Owner check passed!!!");
this.getXeroInvoiceData( reqData );
} else {
console.log("Owner check failed!!!")
this.reportType = 2;
};
} else {
if ( OwnerDataResponse.status == 204 ) {
console.log('Res.Status = ' + OwnerDataResponse.status)
console.log('Owner id not found!!!');
this.reportType = 1;
}
}});
}
getXeroInvoiceData( reqData : PmtData ) {
/*
// Call test Xero API
let url : string = "http://localhost:3000/xero/" + reqData.invoice;
this.http
.get<any>(url)
*/
console.log('>> find current zcash price');
this.getPrice(this.owner.currency);
console.log('get Invoice -> ' + reqData.invoice);
let invParams = new HttpParams();
invParams = invParams.append('address', this.owner.address);
invParams = invParams.append('inv', reqData.invoice);
let inv = this.http.get<{message:string, invData: any}>
( this.beUrl+'invdata',
{ headers: this.reqHeaders,
params: invParams,
observe: 'response'});
inv.subscribe( invDataResponse => {
// console.log('Response from ZGo-Xero');
// console.log(invDataResponse.status);
this.invData_buff = invDataResponse.body;
this.invData.inv_Type = this.invData_buff.invdata.inv_Type;
this.invData.inv_Id = this.invData_buff.invdata.inv_Id;
this.invData.inv_No = this.invData_buff.invdata.inv_No;
this.invData.inv_Contact = this.invData_buff.invdata.inv_Contact;
this.invData.inv_Currency = this.invData_buff.invdata.inv_Currency;
this.invData.inv_CurrencyRate = this.invData_buff.invdata.inv_CurrencyRate;
this.invData.inv_Total = this.invData_buff.invdata.inv_Total;
this.invData.inv_Status = this.invData_buff.invdata.inv_Status;
this.invData.inv_Date = this.invData_buff.invdata.inv_Date;
this.invData.inv_shortCode = reqData.shortcode;
/*
console.log('>>> inv_Type -> ' + this.invData.inv_Type);
console.log('>>> inv_Id -> ' + this.invData.inv_Id);
console.log('>>> inv_No -> ' + this.invData.inv_No);
console.log('>>> inv_Contact -> ' + this.invData.inv_Contact);
console.log('>>> inv_Currency-> ' + this.invData.inv_Currency);
console.log('>>> inv_CurrencyRate -> ' + this.invData.inv_CurrencyRate);
console.log('>>> inv_Total -> ' + this.invData.inv_Total);
console.log('>>> inv_Status-> ' + this.invData.inv_Status);
console.log('>>> inv_Date -> ' + this.invData.inv_Date);
*/
if ( this.invData.inv_Type == 'ACCREC' ) {
console.log('Invoice type is correct!!');
// Test if invoice is not already paid
if ( this.invData.inv_Status == 'AUTHORISED') {
console.log('invoice is payable');
// Test if Invoice's currency is supported
if ( this.invData.inv_Currency == reqData.currency ) {
console.log('Invoice currency supported');
// Test if requested amount is as reported by Xero
if ( this.invData.inv_Total == reqData.amount ) {
console.log('Invoice amount Ok - create Order');
// =====> Create order here
this.createOrder();
//
} else {
console.log('Invoice amount does not match')
this.reportType = 8;
}
} else {
console.log('Invoice currency not supported');
this.reportType = 7;
}
} else {
console.log('Invoice already paid');
this.reportType = 6;
}
} else {
console.log('Invoice type is invalid' );
this.reportType = 5;
}
},
error => {
console.log("Error while getting invData!!!");
console.log(error);
console.log(error.status);
if ( error.status == 500 ) {
// Assume that invoice was not found by haskell server
this.reportType = 4;
}
});
}
createOrder() {
this.reportType = 0;
// console.log('Starting order generation');
// console.log('>> find current zcash price');
this.order = {
_id: '',
address: this.owner.address,
session: 'Xero-' + this.owner._id,
currency: this.owner.currency,
timestamp: new Date(Date.now()).toISOString(),
closed: true,
totalZec: this.invData.inv_Total/this.zPrice,
price: this.zPrice,
total: this.invData.inv_Total,
paid: false,
externalInvoice: this.invData.inv_No,
shortCode: this.invData.inv_shortCode,
token: '',
lines: [{qty: 1,
name: 'Invoice from ' + this.owner.name + '[' + this.invData.inv_No + ']',
cost: this.invData.inv_Total}]
};
let obs = this.http.post<{message: string, order: Order}>
(this.beUrl+'api/orderx',
{payload: this.order},
{ headers: this.reqHeaders }
); );
obs.subscribe((orderData) => { obs.subscribe((invoiceData) => {
// console.log('Order created'); this.reportType = invoiceData.body!.reportType;
this.order = invoiceData.body!.order;
// console.log(orderData.order); this.shop = invoiceData.body!.shop;
this.order = orderData.order
console.log('>> order -> ' + JSON.stringify(this.order));
this.orderId = String(this.order._id); this.orderId = String(this.order._id);
// console.log('Generating QRCode....') // console.log('Generating QRCode....')
this.codeString = `zcash:${this.order.address}?amount=${this.order.totalZec.toFixed(8)}&memo=${URLSafeBase64.encode(Buffer.from('ZGo Order::'.concat(this.orderId).concat(' Invoice: ').concat(orderData.order.externalInvoice)))}`; this.codeString = `zcash:${this.order.address}?amount=${this.order.totalZec.toFixed(8)}&memo=${URLSafeBase64.encode(Buffer.from('ZGo Order::'.concat(this.orderId).concat(' Invoice: ').concat(this.order.externalInvoice)))}`;
var qrcode = new QRCode(document.getElementById("payment-qr"), { var qrcode = new QRCode(document.getElementById("payment-qr"), {
text: this.codeString, text: this.codeString,
@ -351,9 +184,6 @@ vE = {
}); });
this.zcashUrl = this.sanitizer.bypassSecurityTrustUrl(this.codeString); this.zcashUrl = this.sanitizer.bypassSecurityTrustUrl(this.codeString);
}, error => {
console.log(error.message);
}); });
} }
@ -364,25 +194,9 @@ vE = {
} }
getPrice(currency: string){
//var currency = 'usd';
const params = new HttpParams().append('currency', currency);
let obs = this.http.get<{message: string, price: any}>(this.beUrl+'api/price', { headers:this.reqHeaders, params: params, observe: 'response'});
obs.subscribe((PriceData) => {
if (PriceData.status == 200) {
this.zPrice = PriceData.body!.price.price;
console.log("price", this.zPrice);
} else {
console.log('No price found for currency', currency);
this.zPrice = 1.0;
}
});
return obs;
}
copyAddress() { copyAddress() {
if (!navigator.clipboard) { if (!navigator.clipboard) {
// alert("Copy functionality not supported"); // alert("Copy functionality not supported");
this.notifierService this.notifierService
.showNotification(this.vE.pmtserviceCopyNotavail, .showNotification(this.vE.pmtserviceCopyNotavail,
this.vE.pmtserviceNotservClose, this.vE.pmtserviceNotservClose,
@ -397,12 +211,13 @@ vE = {
this.vE.pmtserviceNotservClose, this.vE.pmtserviceNotservClose,
"error", "error",
this.vE.pmtserviceNotservError); this.vE.pmtserviceNotservError);
// console.error("Error", err); // console.error("Error", err);
} }
} }
copyAmount() { copyAmount() {
if (!navigator.clipboard) { if (!navigator.clipboard) {
// alert("Copy functionality not supported"); // alert("Copy functionality not supported");
this.notifierService this.notifierService
.showNotification(this.vE.pmtserviceCopyNotavail, .showNotification(this.vE.pmtserviceCopyNotavail,
this.vE.pmtserviceNotservClose, this.vE.pmtserviceNotservClose,
@ -417,13 +232,13 @@ vE = {
this.vE.pmtserviceNotservClose, this.vE.pmtserviceNotservClose,
"error", "error",
this.vE.pmtserviceNotservError); this.vE.pmtserviceNotservError);
// console.error("Error", err); // console.error("Error", err);
} }
} }
copyMemo() { copyMemo() {
if (!navigator.clipboard) { if (!navigator.clipboard) {
// alert("Copy functionality not supported"); // alert("Copy functionality not supported");
this.notifierService this.notifierService
.showNotification(this.vE.pmtserviceCopyNotavail, .showNotification(this.vE.pmtserviceCopyNotavail,
this.vE.pmtserviceNotservClose, this.vE.pmtserviceNotservClose,
@ -438,7 +253,7 @@ vE = {
this.vE.pmtserviceNotservClose, this.vE.pmtserviceNotservClose,
"error", "error",
this.vE.pmtserviceNotservError); this.vE.pmtserviceNotservError);
// console.error("Error", err); // console.error("Error", err);
} }
} }