Implement tips component

This commit is contained in:
Rene Vergara 2023-10-26 11:44:22 -05:00
parent 1ba8d2189a
commit f54cc14e92
Signed by: pitmutt
GPG key ID: 65122AD495A7F5B2
12 changed files with 3314 additions and 2564 deletions

5458
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -32,6 +32,7 @@
"async": "^3.2.4", "async": "^3.2.4",
"coingecko-api": "^1.0.10", "coingecko-api": "^1.0.10",
"easyqrcodejs": "^4.4.13", "easyqrcodejs": "^4.4.13",
"hammerjs": "^2.0.8",
"material-design-icons": "^3.0.1", "material-design-icons": "^3.0.1",
"rxjs": "~7.8.0", "rxjs": "~7.8.0",
"sha.js": "^2.4.11", "sha.js": "^2.4.11",

View file

@ -1,5 +1,5 @@
import { NgModule } from '@angular/core'; import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser'; import { BrowserModule, } from '@angular/platform-browser';
import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { MatInputModule } from '@angular/material/input'; import { MatInputModule } from '@angular/material/input';
import { MatAutocompleteModule } from '@angular/material/autocomplete'; import { MatAutocompleteModule } from '@angular/material/autocomplete';
@ -52,6 +52,7 @@ import { PmtserviceComponent } from './pmtservice/pmtservice.component';
import { XeroRegComponent } from './xeroreg/xeroreg.component'; import { XeroRegComponent } from './xeroreg/xeroreg.component';
import { DbExportComponent } from './db-export/db-export.component'; import { DbExportComponent } from './db-export/db-export.component';
import { SessionpayComponent } from './sessionpay/sessionpay.component'; import { SessionpayComponent } from './sessionpay/sessionpay.component';
import { TipsComponent } from './tips/tips.component';
@NgModule({ @NgModule({
declarations: [ declarations: [
@ -83,9 +84,10 @@ import { SessionpayComponent } from './sessionpay/sessionpay.component';
XeroRegComponent, XeroRegComponent,
DbExportComponent, DbExportComponent,
SessionpayComponent, SessionpayComponent,
TipsComponent,
], ],
imports: [ imports: [
BrowserModule, BrowserAnimationsModule,
AppRoutingModule, AppRoutingModule,
FormsModule, FormsModule,
ReactiveFormsModule, ReactiveFormsModule,
@ -108,13 +110,14 @@ import { SessionpayComponent } from './sessionpay/sessionpay.component';
MatTabsModule, MatTabsModule,
MatDatepickerModule, MatDatepickerModule,
MatNativeDateModule, MatNativeDateModule,
BrowserAnimationsModule, BrowserModule,
FontAwesomeModule FontAwesomeModule
], ],
exports: [ exports: [
MatIconModule MatIconModule
], ],
providers: [], providers: [
],
bootstrap: [AppComponent] bootstrap: [AppComponent]
}) })
export class AppModule { } export class AppModule { }

View file

@ -78,13 +78,13 @@
<tr *ngIf="tax > 0"> <tr *ngIf="tax > 0">
<td class="newOrdertbdetail" style="text-align: right;">Sales Tax</td> <td class="newOrdertbdetail" style="text-align: right;">Sales Tax</td>
<td class="newOrdertbdetail" style="text-align: right;">{{ tax / 100 | percent:'1.2-4'}}</td> <td class="newOrdertbdetail" style="text-align: right;">{{ tax / 100 | percent:'1.2-4'}}</td>
<td class="newOrdertbdetail" style="text-align: right;">{{ total * tax / 100 | currency: getCurrency() }}</td> <td class="newOrdertbdetail" style="text-align: right;">{{ order.taxAmount | currency: getCurrency() }}</td>
<td></td> <td></td>
</tr> </tr>
<tr *ngIf="vat > 0"> <tr *ngIf="vat > 0">
<td class="newOrdertbdetail" style="text-align: right;">Value-Added Tax</td> <td class="newOrdertbdetail" style="text-align: right;">Value-Added Tax</td>
<td class="newOrdertbdetail" style="text-align: right;">{{ vat / 100 | percent:'1.2-4' }}</td> <td class="newOrdertbdetail" style="text-align: right;">{{ vat / 100 | percent:'1.2-4' }}</td>
<td class="newOrdertbdetail" style="text-align: right;">{{ total * vat / 100 | currency: getCurrency() }}</td> <td class="newOrdertbdetail" style="text-align: right;">{{ order.vatAmount | currency: getCurrency() }}</td>
<td></td> <td></td>
</tr> </tr>
</tbody> </tbody>

View file

@ -21,6 +21,7 @@ import { NotifierService } from '../notifier.service';
import { LanguageService } from '../language.service'; import { LanguageService } from '../language.service';
import { LanguageData } from '../language.model'; import { LanguageData } from '../language.model';
import {TipsComponent} from '../tips/tips.component';
@Component({ @Component({
selector: 'app-order', selector: 'app-order',
@ -63,11 +64,13 @@ export class OrderComponent implements OnInit{
public total: number = 0; public total: number = 0;
public tax: number = 0; public tax: number = 0;
public vat: number = 0; public vat: number = 0;
public tip: boolean = false;
public orderUpdate: Observable<Order>; public orderUpdate: Observable<Order>;
public priceUpdate: Observable<number>; public priceUpdate: Observable<number>;
public totalUpdate: Observable<number>; public totalUpdate: Observable<number>;
public taxUpdate: Observable<number>; public taxUpdate: Observable<number>;
public vatUpdate: Observable<number>; public vatUpdate: Observable<number>;
public tipUpdate: Observable<boolean>;
// ------------------------------------ // ------------------------------------
// //
@ -146,6 +149,10 @@ export class OrderComponent implements OnInit{
this.vatUpdate.subscribe((vat) => { this.vatUpdate.subscribe((vat) => {
this.vat = vat; this.vat = vat;
}); });
this.tipUpdate = orderService.tipUpdate;
this.tipUpdate.subscribe((tip) => {
this.tip = tip;
});
} }
ngOnInit() { ngOnInit() {
@ -182,40 +189,59 @@ export class OrderComponent implements OnInit{
} }
checkout() { checkout() {
var zec = this.total/this.price; const dialogConfig3 = new MatDialogConfig();
this.order.totalZec = parseFloat(zec.toFixed(8));
const dialogConfig = new MatDialogConfig();
dialogConfig.disableClose = true;
dialogConfig.autoFocus = true;
dialogConfig.data = {
totalZec: this.order.totalZec,
addr: this.order.address,
orderId: this.order._id
};
const dialogRef = this.dialog.open(CheckoutComponent, dialogConfig); dialogConfig3.disableClose = true;
dialogRef.afterClosed().subscribe((val) => { dialogConfig3.autoFocus = true;
if (val) { dialogConfig3.data = {
const dialogConfig2 = new MatDialogConfig(); amt: this.total,
dialogConfig2.disableClose = true; flag: this.tip
dialogConfig2.autoFocus = true; };
dialogConfig2.data = {
order: this.order._id
}; const dialogRef3 = this.dialog.open(TipsComponent, dialogConfig3);
console.log('Payment confirmed!'); dialogRef3.afterClosed().subscribe((tipVal) => {
this.orderService.closeOrder(true); this.orderService.updateTip(tipVal).then((orderData) => {
const dialogRef2 = this.dialog.open(ReceiptQRComponent, dialogConfig2); this.orderService.getOrder().subscribe((oData) => {
dialogRef2.afterClosed().subscribe( val => { var zec = this.total/this.price;
if (val) { this.order.totalZec = parseFloat(zec.toFixed(8));
console.log('Receipt closed.'); const dialogConfig = new MatDialogConfig();
this.oLines = []; dialogConfig.disableClose = true;
} dialogConfig.autoFocus = true;
}); dialogConfig.data = {
} else { totalZec: this.order.totalZec,
console.log('Returning to order'); addr: this.order.address,
} orderId: this.order._id
};
const dialogRef = this.dialog.open(CheckoutComponent, dialogConfig);
dialogRef.afterClosed().subscribe((val) => {
if (val) {
const dialogConfig2 = new MatDialogConfig();
dialogConfig2.disableClose = true;
dialogConfig2.autoFocus = true;
dialogConfig2.data = {
order: this.order._id
};
console.log('Payment confirmed!');
this.orderService.closeOrder(true);
const dialogRef2 = this.dialog.open(ReceiptQRComponent, dialogConfig2);
dialogRef2.afterClosed().subscribe( val => {
if (val) {
console.log('Receipt closed.');
this.oLines = [];
}
});
} else {
console.log('Returning to order');
}
});
})
}).catch((error) => {
console.log('Failed to get promise');
});
}); });
} }
invoice() { invoice() {

View file

@ -1,5 +1,5 @@
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { BehaviorSubject, Observable } from 'rxjs'; import { BehaviorSubject, Observable, lastValueFrom } from 'rxjs';
import { HttpClient, HttpParams, HttpHeaders } from '@angular/common/http'; import { HttpClient, HttpParams, HttpHeaders } from '@angular/common/http';
import { Order } from './order.model'; import { Order } from './order.model';
import { UserService } from '../user.service'; import { UserService } from '../user.service';
@ -79,6 +79,8 @@ export class OrderService {
public readonly taxUpdate: Observable<number> = this._taxUpdated.asObservable(); public readonly taxUpdate: Observable<number> = this._taxUpdated.asObservable();
private _vatUpdated: BehaviorSubject<number> = new BehaviorSubject(this.dataStore.owner.vatValue); private _vatUpdated: BehaviorSubject<number> = new BehaviorSubject(this.dataStore.owner.vatValue);
public readonly vatUpdate: Observable<number> = this._vatUpdated.asObservable(); public readonly vatUpdate: Observable<number> = this._vatUpdated.asObservable();
private _tipUpdated: BehaviorSubject<boolean> = new BehaviorSubject(this.dataStore.owner.tips);
public readonly tipUpdate: Observable<boolean> = this._tipUpdated.asObservable();
public userUpdate: Observable<User>; public userUpdate: Observable<User>;
public ownerUpdate: Observable<Owner>; public ownerUpdate: Observable<Owner>;
private reqHeaders: HttpHeaders; private reqHeaders: HttpHeaders;
@ -112,6 +114,7 @@ export class OrderService {
} else { } else {
this._vatUpdated.next(0); this._vatUpdated.next(0);
} }
this._tipUpdated.next(Object.assign({}, this.dataStore).owner.tips);
}); });
} }
@ -122,10 +125,6 @@ export class OrderService {
if (OrderDataResponse.status == 200) { if (OrderDataResponse.status == 200) {
this.dataStore.order = OrderDataResponse.body!.order; this.dataStore.order = OrderDataResponse.body!.order;
this._orderUpdated.next(Object.assign({}, this.dataStore).order); this._orderUpdated.next(Object.assign({}, this.dataStore).order);
//this.dataStore.order.total = 0;
//for(var line of this.dataStore.order.lines) {
//this.dataStore.order.total += line.qty * line.cost;
//}
this._totalUpdated.next(Object.assign({}, this.dataStore).order.total); this._totalUpdated.next(Object.assign({}, this.dataStore).order.total);
} else { } else {
console.log('No order found'); console.log('No order found');
@ -165,14 +164,6 @@ export class OrderService {
} }
createOrder(lineItem: LineItem) { createOrder(lineItem: LineItem) {
let localTax = 0;
let localVat = 0;
if (this.dataStore.owner.tax) {
localTax = lineItem.cost * lineItem.qty * this.dataStore.owner.taxValue / 100;
}
if (this.dataStore.owner.vat) {
localVat = lineItem.cost * lineItem.qty * this.dataStore.owner.vatValue / 100;
}
var order:Order = { var order:Order = {
_id: '', _id: '',
address: this.dataStore.user.address, address: this.dataStore.user.address,
@ -187,8 +178,8 @@ export class OrderService {
externalInvoice: '', externalInvoice: '',
shortCode: '', shortCode: '',
token: '', token: '',
taxAmount: localTax, taxAmount: 0,
vatAmount: localVat, vatAmount: 0,
tipAmount: 0, tipAmount: 0,
lines: [lineItem] lines: [lineItem]
}; };
@ -236,6 +227,13 @@ export class OrderService {
return obs; return obs;
} }
async updateTip(amt: number){
this.dataStore.order.tipAmount = amt;
let obs = this.http.post(this.beUrl+'api/order', {payload: this.dataStore.order}, {headers: this.reqHeaders, params: this.reqParams, observe: 'response'});
const res1 = await lastValueFrom(obs);
return res1;
}
closeOrder(paid: boolean){ closeOrder(paid: boolean){
this.fullnodeService.priceUpdate.subscribe((price) => { this.fullnodeService.priceUpdate.subscribe((price) => {
this.dataStore.order.price = price; this.dataStore.order.price = price;

View file

@ -1,5 +1,5 @@
import { Inject, Component, OnInit, ViewEncapsulation} from '@angular/core'; import { Inject, Component, OnInit, ViewEncapsulation} from '@angular/core';
import { MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog'; import { MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog';
import { DomSanitizer, SafeUrl } from '@angular/platform-browser'; import { DomSanitizer, SafeUrl } from '@angular/platform-browser';
import { NotifierService } from '../notifier.service'; import { NotifierService } from '../notifier.service';

View file

@ -0,0 +1,20 @@
.mat-mdc-card-title {
font-family: 'Spartan', sans-serif;
font-size: 20px;
font-weight: 600;
text-align: center;
padding: 10px;
color: white;
background: #ff5722;
}
.card-contents {
font-family: 'Spartan', sans-serif;
}
.card-buttons {
display: flex;
justify-content: space-between;
margin-top: 20px;
padding: 20px;
}

View file

@ -0,0 +1,40 @@
<mat-card>
<mat-card-title class="scan-header">
Enter tip:
</mat-card-title>
<mat-card-content>
<br>
<div align="center" class="card-contents">
<table cellspacing="0">
<tr>
<th align="center">Subtotal</th>
<th align="center"></th>
<th align="center">Tip</th>
<th align="center"></th>
<th align="center">Total</th>
</tr>
<tr>
<td align="center">{{orderTotal | currency}}</td>
<td align="center">+</td>
<td align="center">{{orderTotal * value | currency}}</td>
<td align="center">=</td>
<td align="center">{{orderTotal * (1 + value) | currency}}</td>
</tr>
</table>
</div>
<br>
<div align="center" class="card-contents">
{{value | percent}}
<br>
<input type="range" min="0" max="1" step="0.01" [(ngModel)]="value">
</div>
</mat-card-content>
<mat-card-actions class="card-buttons">
<button mat-raised-button (click)="close()">
<mat-icon class="icon">close</mat-icon>No Tip
</button>
<button mat-raised-button color="primary" (click)="confirm()">
<mat-icon class="icon">done</mat-icon>Done
</button>
</mat-card-actions>
</mat-card>

View file

@ -0,0 +1,21 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { TipsComponent } from './tips.component';
describe('TipsComponent', () => {
let component: TipsComponent;
let fixture: ComponentFixture<TipsComponent>;
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [TipsComponent]
});
fixture = TestBed.createComponent(TipsComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View file

@ -0,0 +1,42 @@
import { Inject, Component, OnInit } from '@angular/core';
import { MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog';
@Component({
selector: 'app-tips',
templateUrl: './tips.component.html',
styleUrls: ['./tips.component.css']
})
export class TipsComponent implements OnInit{
orderTotal:number = 0;
value:number = 0.15;
flag:boolean = true;
constructor(
private dialogRef: MatDialogRef<TipsComponent>,
@Inject(MAT_DIALOG_DATA) public data: {amt: number, flag: boolean}) {
this.orderTotal = data.amt;
this.flag = data.flag;
if(!data.flag){
this.dialogRef.close(0);
}
}
ngOnInit(): void {
if(!this.flag){
this.dialogRef.close(0);
}
}
formatPercent(v: number) {
return (v * 100) + '%';
}
close() {
this.dialogRef.close(0);
}
confirm() {
this.dialogRef.close(this.orderTotal * this.value);
}
}

View file

@ -19,7 +19,162 @@
{ "language":"br-US", "component":"receipt", "data" : { "receipt_info_notavail":"Não há informação disponível.","receipt_invalid_id":"ID do comprovante incorreto.","receipt_order_date":"Data:","receipt_order_id":"ID do Pedido:","receipt_order_price":"Preço:","receipt_order_total":"Total:","receipt_qty_lbl":"Qtde.","receipt_receipt_lbl":"Comprovante","receipt_zcash_price":"Preço da Zcash:"}}, { "language":"br-US", "component":"receipt", "data" : { "receipt_info_notavail":"Não há informação disponível.","receipt_invalid_id":"ID do comprovante incorreto.","receipt_order_date":"Data:","receipt_order_id":"ID do Pedido:","receipt_order_price":"Preço:","receipt_order_total":"Total:","receipt_qty_lbl":"Qtde.","receipt_receipt_lbl":"Comprovante","receipt_zcash_price":"Preço da Zcash:"}},
{ "language":"br-US", "component":"receiptqr", "data" : { "receiptqr_close_btn":"Fechar","receiptqr_scan_receipt":"Escaneie para o seu comprovante"}}, { "language":"br-US", "component":"receiptqr", "data" : { "receiptqr_close_btn":"Fechar","receiptqr_scan_receipt":"Escaneie para o seu comprovante"}},
{ "language":"br-US", "component":"scan", "data" : { "scan_cant_scan":"Não consegue escanear? ","scan_close_btn":"Fechar","scan_copy_address":"Copiar Endereço","scan_copy_amount":"Copiar Valor","scan_copy_error":"Falha ao copiar o valor","scan_copy_memo":"Copiar Memo","scan_fail_payment":"Erro ao verificar o pagamento","scan_func_notavail":"Funcionalidade de cópia não suportada","scan_memo_sent":"Memo enviado!","scan_notserv_close":"Fechar","scan_notserv_error":"Erro","scan_or_button":"o","scan_scanqr_code":"Scanei o QR Code","scan_text_info":"Certifique-se de selecionar \"Incluir Responder-A\" na sua carteira antes de enviar o seu memorando.","scan_use_this":"Use isso ","scan_wallet_link":"Link de carteira"}}, { "language":"br-US", "component":"scan", "data" : { "scan_cant_scan":"Não consegue escanear? ","scan_close_btn":"Fechar","scan_copy_address":"Copiar Endereço","scan_copy_amount":"Copiar Valor","scan_copy_error":"Falha ao copiar o valor","scan_copy_memo":"Copiar Memo","scan_fail_payment":"Erro ao verificar o pagamento","scan_func_notavail":"Funcionalidade de cópia não suportada","scan_memo_sent":"Memo enviado!","scan_notserv_close":"Fechar","scan_notserv_error":"Erro","scan_or_button":"o","scan_scanqr_code":"Scanei o QR Code","scan_text_info":"Certifique-se de selecionar \"Incluir Responder-A\" na sua carteira antes de enviar o seu memorando.","scan_use_this":"Use isso ","scan_wallet_link":"Link de carteira"}},
{ "language":"br-US", "component":"settings", "data" : { "settings_acode_invalid":"Número da Conta inválido (10 caracteres no máximo)","settings_acode_lbl":"Número da conta:","settings_acode_notsaved":"Número da Conta não salvo!!","settings_acode_saved":"Número da conta Salvo!!","settings_close_btn":"Cancelar","settings_confirm_payments":"Confirmar pagamentos?","settings_copy_notavail":"Funcionalidade não disponível para o seu navegador. Use o botão enviar ao invés disso","settings_currency_lbl":"Moeda","settings_link_2xero":"Conectar-se ao Xero","settings_name_lbl":"Nome","settings_name_placeholder":"Seu nome","settings_notserv_close":"Fechar","settings_notserv_error":"Erro","settings_notserv_success":"Sucesso","settings_notserv_warning":"Aviso","settings_ownerid_copied":"ID do proprietário copiado para a prancheta","settings_ownerid_notcopied":"Cópia não disponível em seu navegador","settings_pmtserv_url":"URL de Serviço de Pagamento:","settings_relink_2xero":"Reconectar-se ao Xero ","settings_save_btn":"Salvar","settings_tab_integrations":"Integrações","settings_tab_mainlbl":"Principal","settings_url_copied":"URL ZGo copiado para a prancheta!!","settings_use_satoshi":"Usar zatoshis?","settings_view_title":"Definições","settings_vkey_lbl":"Chave de visualização","settings_vkey_placeholder":"Sua chave de visualização da carteira","settings_wctoken_copied":"Token WooCommerce copiado para a prancheta","settings_wctoken_generated":"Token da WoCommerce gerado","settings_wctoken_genfail":"Geração do token da WooCommerce falhou","settings_wctoken_notcopied":"Cópia não disponível no seu navegador","settings_wc_closebtn":"Fechar","settings_wc_gentoken":"Gerar Token","settings_wc_lbl":"WooCommerce","settings_wc_ownerlbl":"Proprietário:","settings_xeropmt_confirmdis":"Confirmação de pagamentos Xero desativada!! ","settings_xero_closebtn":"Fechar","settings_xero_lbl":"Xero","settings_xero_savebtn":"Salvar código"}}, {
"language": "en-US",
"component": "settings",
"data": {
"settings_acode_invalid": "Invalid Account code (10 chars max.)",
"settings_acode_lbl": "Account Code:",
"settings_acode_notsaved": "Account Code not saved",
"settings_acode_saved": "Account Code saved!!",
"settings_close_btn": "Cancel",
"settings_confirm_payments": "Confirm payments?",
"settings_copy_notavail": "Functionality not available for your browser. Use send button instead.",
"settings_currency_lbl": "Currency",
"settings_link_2xero": "Link to Xero",
"settings_name_lbl": "Name",
"settings_name_placeholder": "Your Name",
"settings_notserv_close": "Close",
"settings_notserv_error": "Error",
"settings_notserv_success": "Success",
"settings_notserv_waring": "Warning",
"settings_ownerid_copied": "Owner ID copied to clipboard",
"settings_ownerid_notcopied": "Copying not available in your browser",
"settings_pmtserv_url": "Payment Service URL:",
"settings_relink_2xero": "Relink to Xero",
"settings_save_btn": "Save",
"settings_tab_integrations": "Integrations",
"settings_tab_mainlbl": "Main",
"settings_URL_copied": "ZGo URL copied to Clipboard!!",
"settings_use_satoshi": "Use zatoshis?",
"settings_view_title": "Settings",
"settings_vkey_lbl": "Viewing key",
"settings_vkey_placeholder": "Your wallet viewing key",
"settings_wctoken_copied": "WooCommerce Token copied to clipboard",
"settings_wctoken_generaged": "WooCommerce Token generated!",
"settings_wctoken_genfail": "WooCommerce Token generation failed",
"settings_wctoken_notcopied": "Copying not available in your browser",
"settings_wc_closebtn": "Close",
"settings_wc_gentoken": "Generate Token",
"settings_wc_lbl": "WooCommerce",
"settings_wc_ownerlbl": "Owner:",
"settings_xeropmt_confirmdis": "Xero Payment confirmation disabled!!",
"settings_xero_closebtn": "Close",
"settings_xero_lbl": "Xero",
"settings_xero_savebtn": "Save Code",
"settings_use_tips" : "Use Tips?",
"settings_use_tax" : "Use Tax?",
"settings_use_vat" : "Use VAT?",
"settings_sales_tax_rate_lbl" : "Sales Tax Rate (%)",
"settings_sales_tax_rate_txt" : "Sales Tax Rate (%)",
"settings_sales_vat_rate_lbl" : "VAT Rate (%)",
"settings_sales_vat_rate_txt" : "Value Added Tax Rate (%)"
}
},
{
"language": "es-US",
"component": "settings",
"data": {
"settings_acode_invalid": "Código de Cuenta inválido (10 caracteres max.)",
"settings_acode_lbl": "Código de Cuenta:",
"settings_acode_notsaved": "Código de cuenta no guardado!",
"settings_acode_saved": "Código de cuenta guardado!!",
"settings_close_btn": "Cancelar",
"settings_confirm_payments": "Confirmar pagos?",
"settings_copy_notavail": "Funcionalidad no disponible para su navegador. Use el botón de enviar.",
"settings_currency_lbl": "Moneda",
"settings_link_2xero": "Enlazar a Xero",
"settings_name_lbl": "Nombre",
"settings_name_placeholder": "Su nombre",
"settings_notserv_close": "Cerrar",
"settings_notserv_error": "Error",
"settings_notserv_success": "Suceso",
"settings_notserv_warning": "Advertencia",
"settings_ownerid_copied": "ID del propietario copiado a la papelera",
"settings_ownerid_notcopied": "Copiar no disponible en su navegador",
"settings_pmtserv_url": "URL del Servicio de Pago:",
"settings_relink_2xero": "Reconectar a Xero",
"settings_save_btn": "Salvar",
"settings_tab_integrations": "Integraciones",
"settings_tab_mainlbl": "Principal",
"settings_URL_copied": "URL de ZGo copiado a la papelera!!",
"settings_use_satoshi": "Usar zatoshis?",
"settings_view_title": "Configuración",
"settings_vkey_lbl": "Clave de visualización",
"settings_vkey_placeholder": "Clave de visualización de su billetera",
"settings_wctoken_copied": "Token de WooCommerce copiado a la papelera",
"settings_wctoken_generated": "Token de WooCommerce generado!",
"settings_wctoken_genfail": "Falla generación de Token de WooCommerce",
"settings_wctoken_notcopied": "Copiar no disponible en su navegador",
"settings_wc_closebtn": "Cerrar",
"settings_wc_gentoken": "Generar Token",
"settings_wc_lbl": "WooCommerce",
"settings_wc_ownerlbl": "Propietario:",
"settings_xeropmt_confirmdis": "Confirmación de pagos de Xero desactivada!!",
"settings_xero_closebtn": "Cerrar",
"settings_xero_lbl": "Xero",
"settings_xero_savebtn": "Guardar Código",
"settings_use_tips" : "Usar Propinas?",
"settings_use_tax" : "Usar Impuesto a la Venta?",
"settings_use_vat" : "Usar IVA?",
"settings_sales_tax_rate_lbl" : "Tasa de Impuesto a la Venta (%)",
"settings_sales_tax_rate_txt" : "Tasa de Impuesto a la Venta (%)",
"settings_sales_vat_rate_lbl" : "Tasa IVA(%)",
"settings_sales_vat_rate_txt" : "Tasa IVA (%)"
}
},
{
"language": "br-US",
"component": "settings",
"data": {
"settings_acode_invalid": "Número da Conta inválido (10 caracteres no máximo)",
"settings_acode_lbl": "Número da conta:",
"settings_acode_notsaved": "Número da Conta não salvo!!",
"settings_acode_saved": "Número da conta Salvo!!",
"settings_close_btn": "Cancelar",
"settings_confirm_payments": "Confirmar pagamentos?",
"settings_copy_notavail": "Funcionalidade não disponível para o seu navegador. Use o botão enviar ao invés disso",
"settings_currency_lbl": "Moeda",
"settings_link_2xero": "Conectar-se ao Xero",
"settings_name_lbl": "Nome",
"settings_name_placeholder": "Seu nome",
"settings_notserv_close": "Fechar",
"settings_notserv_error": "Erro",
"settings_notserv_success": "Sucesso",
"settings_notserv_warning": "Aviso",
"settings_ownerid_copied": "ID do proprietário copiado para a prancheta",
"settings_ownerid_notcopied": "Cópia não disponível em seu navegador",
"settings_pmtserv_url": "URL de Serviço de Pagamento:",
"settings_relink_2xero": "Reconectar-se ao Xero ",
"settings_save_btn": "Salvar",
"settings_tab_integrations": "Integrações",
"settings_tab_mainlbl": "Principal",
"settings_url_copied": "URL ZGo copiado para a prancheta!!",
"settings_use_satoshi": "Usar zatoshis?",
"settings_view_title": "Definições",
"settings_vkey_lbl": "Chave de visualização",
"settings_vkey_placeholder": "Sua chave de visualização da carteira",
"settings_wctoken_copied": "Token WooCommerce copiado para a prancheta",
"settings_wctoken_generated": "Token da WoCommerce gerado",
"settings_wctoken_genfail": "Geração do token da WooCommerce falhou",
"settings_wctoken_notcopied": "Cópia não disponível no seu navegador",
"settings_wc_closebtn": "Fechar",
"settings_wc_gentoken": "Gerar Token",
"settings_wc_lbl": "WooCommerce",
"settings_wc_ownerlbl": "Proprietário:",
"settings_xeropmt_confirmdis": "Confirmação de pagamentos Xero desativada!! ",
"settings_xero_closebtn": "Fechar",
"settings_xero_lbl": "Xero",
"settings_xero_savebtn": "Salvar código",
"settings_use_tips" : "Utiliza Propinas?",
"settings_use_tax" : "Usar Imposto sobre vendas?",
"settings_use_vat" : "Usar ICM?",
"settings_sales_tax_rate_lbl" : "Taxa imposto sobre vendas (%)",
"settings_sales_tax_rate_txt" : "Taxa imposto sobre vendas (%)",
"settings_sales_vat_rate_lbl" : "Taxa ICM (%)",
"settings_sales_vat_rate_txt" : "Imposto sobre Circulação de Mercadorias (%)"
}
},
{ "language":"br-US", "component":"viewer", "data" : { "viewer_view_orders":"Ver Pedidos"}}, { "language":"br-US", "component":"viewer", "data" : { "viewer_view_orders":"Ver Pedidos"}},
{ "language":"br-US", "component":"xero", "data" : { "xero_connected_2xero":"Conectado ao Xero!","xero_connecting_2xero":"Conectando ao Xero.."}}, { "language":"br-US", "component":"xero", "data" : { "xero_connected_2xero":"Conectado ao Xero!","xero_connecting_2xero":"Conectando ao Xero.."}},
{ "language":"en-US", "component":"business", "data" : { "business_accept_terms":"I accept the ","business_addrs_nobiz":"We do not have a business associated with this Zcash address, please enter your information below:","business_biz_addressholder":"Address","business_biz_addresslbl":"Address:","business_biz_cityholder":"City","business_biz_citylbl":"City:","business_biz_countryholder":"Country","business_biz_countrylbl":"Country:","business_biz_info":"Provide business info","business_biz_mailholder":"example@domain.com","business_biz_maillbl":"E-mail:","business_biz_nameholder":"Business name","business_biz_namelbl":"Business Name:","business_biz_pcodeholder":"Postal code","business_biz_pcodelbl":"Postal Code:","business_biz_stateholder":"State or Province","business_biz_statelbl":"State/Province:","business_biz_websiteholder":"website","business_biz_websitelbl":"Website:","business_contact_fnamelbl":"Contact First name:","business_contact_fnholder":"First name","business_contact_lnamelbl":"Contact Last Name:","business_contact_lnholder":"Last Name","business_save_btn":"Save","business_select_session ":"Please select the length of session that you need:","business_session_label":"Session:","business_session_lengthlbl":"Session Length","business_session_paylbl":"Pay","business_signup_title":"Business sign-up","business_terms_ofuse":"Terms of Use","business_zgo_confirmlbl":"ZGo confirms your payment"}}, { "language":"en-US", "component":"business", "data" : { "business_accept_terms":"I accept the ","business_addrs_nobiz":"We do not have a business associated with this Zcash address, please enter your information below:","business_biz_addressholder":"Address","business_biz_addresslbl":"Address:","business_biz_cityholder":"City","business_biz_citylbl":"City:","business_biz_countryholder":"Country","business_biz_countrylbl":"Country:","business_biz_info":"Provide business info","business_biz_mailholder":"example@domain.com","business_biz_maillbl":"E-mail:","business_biz_nameholder":"Business name","business_biz_namelbl":"Business Name:","business_biz_pcodeholder":"Postal code","business_biz_pcodelbl":"Postal Code:","business_biz_stateholder":"State or Province","business_biz_statelbl":"State/Province:","business_biz_websiteholder":"website","business_biz_websitelbl":"Website:","business_contact_fnamelbl":"Contact First name:","business_contact_fnholder":"First name","business_contact_lnamelbl":"Contact Last Name:","business_contact_lnholder":"Last Name","business_save_btn":"Save","business_select_session ":"Please select the length of session that you need:","business_session_label":"Session:","business_session_lengthlbl":"Session Length","business_session_paylbl":"Pay","business_signup_title":"Business sign-up","business_terms_ofuse":"Terms of Use","business_zgo_confirmlbl":"ZGo confirms your payment"}},
@ -43,7 +198,6 @@
{ "language":"en-US", "component":"receipt", "data" : { "receipt_info_notavail":"No information available.","receipt_invalid_id":"Incorrect receipt ID.","receipt_order_date":"Date: ","receipt_order_id":"Order ID: ","receipt_order_price":"Price: ","receipt_order_total":"Total: ","receipt_qty_lbl":"Qty.","receipt_receipt_lbl":"Receipt","receipt_zcash_price":"Zcash Price: "}}, { "language":"en-US", "component":"receipt", "data" : { "receipt_info_notavail":"No information available.","receipt_invalid_id":"Incorrect receipt ID.","receipt_order_date":"Date: ","receipt_order_id":"Order ID: ","receipt_order_price":"Price: ","receipt_order_total":"Total: ","receipt_qty_lbl":"Qty.","receipt_receipt_lbl":"Receipt","receipt_zcash_price":"Zcash Price: "}},
{ "language":"en-US", "component":"receiptqr", "data" : { "receiptqr_close_btn":"Close","receiptqr_scan_receipt":"Scan for your Receipt"}}, { "language":"en-US", "component":"receiptqr", "data" : { "receiptqr_close_btn":"Close","receiptqr_scan_receipt":"Scan for your Receipt"}},
{ "language":"en-US", "component":"scan", "data" : { "scan_cant_scan":"Can't scan? ","scan_close_btn":"Close","scan_copy_address":"Copy Address","scan_copy_amount":"Copy Amount","scan_copy_error":"Error while copying ammount","scan_copy_memo":"Copy Memo","scan_fail_payment":"Error while verifying payment","scan_func_notavail":"Copy functionality not supported","scan_memo_sent":"Memo Sent!","scan_notserv_close":"Close","scan_notserv_error":"Error","scan_or_button":"or","scan_scanqr_code":"Scan the QR code","scan_text_info":"Ensure to check the \"Include Reply-To\" box in your wallet before sending your memo.","scan_use_this":"Use this ","scan_wallet_link":"wallet link"}}, { "language":"en-US", "component":"scan", "data" : { "scan_cant_scan":"Can't scan? ","scan_close_btn":"Close","scan_copy_address":"Copy Address","scan_copy_amount":"Copy Amount","scan_copy_error":"Error while copying ammount","scan_copy_memo":"Copy Memo","scan_fail_payment":"Error while verifying payment","scan_func_notavail":"Copy functionality not supported","scan_memo_sent":"Memo Sent!","scan_notserv_close":"Close","scan_notserv_error":"Error","scan_or_button":"or","scan_scanqr_code":"Scan the QR code","scan_text_info":"Ensure to check the \"Include Reply-To\" box in your wallet before sending your memo.","scan_use_this":"Use this ","scan_wallet_link":"wallet link"}},
{ "language":"en-US", "component":"settings", "data" : { "settings_acode_invalid":"Invalid Account code (10 chars max.)","settings_acode_lbl":"Account Code:","settings_acode_notsaved":"Account Code not saved","settings_acode_saved":"Account Code saved!!","settings_close_btn":"Cancel","settings_confirm_payments":"Confirm payments?","settings_copy_notavail":"Functionality not available for your browser. Use send button instead.","settings_currency_lbl":"Currency","settings_link_2xero":"Link to Xero","settings_name_lbl":"Name","settings_name_placeholder":"Your Name","settings_notserv_close":"Close","settings_notserv_error":"Error","settings_notserv_success":"Success","settings_notserv_warning":"Warning","settings_ownerid_copied":"Owner ID copied to clipboard","settings_ownerid_notcopied":"Copying not available in your browser","settings_pmtserv_url":"Payment Service URL:","settings_relink_2xero":"Relink to Xero","settings_save_btn":"Save","settings_tab_integrations":"Integrations","settings_tab_mainlbl":"Main","settings_URL_copied":"ZGo URL copied to Clipboard!!","settings_use_satoshi":"Use zatoshis?","settings_view_title":"Settings","settings_vkey_lbl":"Viewing key","settings_vkey_placeholder":"Your wallet viewing key","settings_wctoken_copied":"WooCommerce Token copied to clipboard","settings_wctoken_generated":"WooCommerce Token generated!","settings_wctoken_genfail":"WooCommerce Token generation failed","settings_wctoken_notcopied":"Copying not available in your browser","settings_wc_closebtn":"Close","settings_wc_gentoken":"Generate Token","settings_wc_lbl":"WooCommerce","settings_wc_ownerlbl":"Owner:","settings_xeropmt_confirmdis":"Xero Payment confirmation disabled!!","settings_xero_closebtn":"Close","settings_xero_lbl":"Xero","settings_xero_savebtn":"Save Code"}},
{ "language":"en-US", "component":"viewer", "data" : { "viewer_view_orders":"View Orders"}}, { "language":"en-US", "component":"viewer", "data" : { "viewer_view_orders":"View Orders"}},
{ "language":"en-US", "component":"xero", "data" : { "xero_connected_2xero":"Connected to Xero!","xero_connecting_2xero":"Connecting to Xero.."}}, { "language":"en-US", "component":"xero", "data" : { "xero_connected_2xero":"Connected to Xero!","xero_connecting_2xero":"Connecting to Xero.."}},
{ "language":"es-US", "component":"business", "data" : { "business_accept_terms":"Acepto los ","business_addrs_nobiz":"No tenemos un negocio asociado a esta dirección de Zcash, por favor ingrese su información abajo:","business_biz_addressholder":"Dirección","business_biz_addresslbl":"Dirección:","business_biz_cityholder":"Ciudad","business_biz_citylbl":"Ciudad:","business_biz_countryholder":"País","business_biz_countrylbl":"País:","business_biz_info":"Ingrese datos del negocio","business_biz_mailholder":"ejemplo@dominio.com","business_biz_maillbl":"E-mail:","business_biz_nameholder":"Nombre del negocio","business_biz_namelbl":"Nombre del Negocio:","business_biz_pcodeholder":"Código Postal","business_biz_pcodelbl":"Código Postal:","business_biz_stateholder":"Estado o Provincia","business_biz_statelbl":"Estado/Provincia:","business_biz_websiteholder":"Sitio web","business_biz_websitelbl":"Sitio Web:","business_contact_fnamelbl":"Nombre del Contacto:","business_contact_fnholder":"Nombre","business_contact_lnamelbl":"Apellido del Contacto:","business_contact_lnholder":"Apellido","business_save_btn":"Salvar","business_select_session":"Seleccione la duración de la sessión que necesita:","business_session_label":"Sesión:","business_session_lengthlbl":"Duración de la Sesión","business_session_paylbl":"Pagar","business_signup_title":"Registrar Negocio","business_terms_ofuse":"Términos de Uso","business_zgo_confirmlbl":"ZGo confirma su pago"}}, { "language":"es-US", "component":"business", "data" : { "business_accept_terms":"Acepto los ","business_addrs_nobiz":"No tenemos un negocio asociado a esta dirección de Zcash, por favor ingrese su información abajo:","business_biz_addressholder":"Dirección","business_biz_addresslbl":"Dirección:","business_biz_cityholder":"Ciudad","business_biz_citylbl":"Ciudad:","business_biz_countryholder":"País","business_biz_countrylbl":"País:","business_biz_info":"Ingrese datos del negocio","business_biz_mailholder":"ejemplo@dominio.com","business_biz_maillbl":"E-mail:","business_biz_nameholder":"Nombre del negocio","business_biz_namelbl":"Nombre del Negocio:","business_biz_pcodeholder":"Código Postal","business_biz_pcodelbl":"Código Postal:","business_biz_stateholder":"Estado o Provincia","business_biz_statelbl":"Estado/Provincia:","business_biz_websiteholder":"Sitio web","business_biz_websitelbl":"Sitio Web:","business_contact_fnamelbl":"Nombre del Contacto:","business_contact_fnholder":"Nombre","business_contact_lnamelbl":"Apellido del Contacto:","business_contact_lnholder":"Apellido","business_save_btn":"Salvar","business_select_session":"Seleccione la duración de la sessión que necesita:","business_session_label":"Sesión:","business_session_lengthlbl":"Duración de la Sesión","business_session_paylbl":"Pagar","business_signup_title":"Registrar Negocio","business_terms_ofuse":"Términos de Uso","business_zgo_confirmlbl":"ZGo confirma su pago"}},
@ -67,7 +221,6 @@
{ "language":"es-US", "component":"receipt", "data" : { "receipt_info_notavail":"No hay información disponible.","receipt_invalid_id":"ID de Recibo incorrecto.","receipt_order_date":"Fecha: ","receipt_order_id":"ID de Orden:","receipt_order_price":"Precio: ","receipt_order_total":"Total: ","receipt_qty_lbl":"Cant.","receipt_receipt_lbl":"Recibo ","receipt_zcash_price":"Precio de Zcash: "}}, { "language":"es-US", "component":"receipt", "data" : { "receipt_info_notavail":"No hay información disponible.","receipt_invalid_id":"ID de Recibo incorrecto.","receipt_order_date":"Fecha: ","receipt_order_id":"ID de Orden:","receipt_order_price":"Precio: ","receipt_order_total":"Total: ","receipt_qty_lbl":"Cant.","receipt_receipt_lbl":"Recibo ","receipt_zcash_price":"Precio de Zcash: "}},
{ "language":"es-US", "component":"receiptqr", "data" : { "receiptqr_close_btn":"Cerrar","receiptqr_scan_receipt":"Escanee para obtener su Recibo"}}, { "language":"es-US", "component":"receiptqr", "data" : { "receiptqr_close_btn":"Cerrar","receiptqr_scan_receipt":"Escanee para obtener su Recibo"}},
{ "language":"es-US", "component":"scan", "data" : { "scan_cant_scan":"No puede escanear? ","scan_close_btn":"Cerrar","scan_copy_address":"Copiar Dirección","scan_copy_amount":"Copiar Valor","scan_copy_error":"Error al copiar valor","scan_copy_memo":"Copiar Memo","scan_fail_payment":"Error al verificar pago","scan_func_notavail":"Funcionalidad de copia no soportada","scan_memo_sent":"Memo enviado!","scan_notserv_close":"Cerrar","scan_notserv_error":"Error","scan_or_button":"ó","scan_scanqr_code":"Escanee el código QR","scan_text_info":"Asegúrese de marcar la caja \"Incluir Responder-A\" en su billetera antes de enviar su memo","scan_use_this":"Use este ","scan_wallet_link":"Link de billetera"}}, { "language":"es-US", "component":"scan", "data" : { "scan_cant_scan":"No puede escanear? ","scan_close_btn":"Cerrar","scan_copy_address":"Copiar Dirección","scan_copy_amount":"Copiar Valor","scan_copy_error":"Error al copiar valor","scan_copy_memo":"Copiar Memo","scan_fail_payment":"Error al verificar pago","scan_func_notavail":"Funcionalidad de copia no soportada","scan_memo_sent":"Memo enviado!","scan_notserv_close":"Cerrar","scan_notserv_error":"Error","scan_or_button":"ó","scan_scanqr_code":"Escanee el código QR","scan_text_info":"Asegúrese de marcar la caja \"Incluir Responder-A\" en su billetera antes de enviar su memo","scan_use_this":"Use este ","scan_wallet_link":"Link de billetera"}},
{ "language":"es-US", "component":"settings", "data" : { "settings_acode_invalid":"Código de Cuenta inválido (10 caracteres max.)","settings_acode_lbl":"Código de Cuenta:","settings_acode_notsaved":"Código de cuenta no guardado!","settings_acode_saved":"Código de cuenta guardado!!","settings_close_btn":"Cancelar","settings_confirm_payments":"Confirmar pagos?","settings_copy_notavail":"Funcionalidad no disponible para su navegador. Use el botón de enviar.","settings_currency_lbl":"Moneda","settings_link_2xero":"Enlazar a Xero","settings_name_lbl":"Nombre","settings_name_placeholder":"Su nombre","settings_notserv_close":"Cerrar","settings_notserv_error":"Error","settings_notserv_success":"Suceso","settings_notserv_warning":"Advertencia","settings_ownerid_copied":"ID del propietario copiado a la papelera","settings_ownerid_notcopied":"Copiar no disponible en su navegador","settings_pmtserv_url":"URL del Servicio de Pago:","settings_relink_2xero":"Reconectar a Xero","settings_save_btn":"Salvar","settings_tab_integrations":"Integraciones","settings_tab_mainlbl":"Principal","settings_URL_copied":"URL de ZGo copiado a la papelera!!","settings_use_satoshi":"Usar zatoshis?","settings_view_title":"Configuración","settings_vkey_lbl":"Clave de visualización","settings_vkey_placeholder":"Clave de visualización de su billetera","settings_wctoken_copied":"Token de WooCommerce copiado a la papelera","settings_wctoken_generated":"Token de WooCommerce generado!","settings_wctoken_genfail":"Falla generación de Token de WooCommerce","settings_wctoken_notcopied":"Copiar no disponible en su navegador","settings_wc_closebtn":"Cerrar","settings_wc_gentoken":"Generar Token","settings_wc_lbl":"WooCommerce","settings_wc_ownerlbl":"Propietario:","settings_xeropmt_confirmdis":"Confirmación de pagos de Xero desactivada!!","settings_xero_closebtn":"Cerrar","settings_xero_lbl":"Xero","settings_xero_savebtn":"Guardar Código"}},
{ "language":"es-US", "component":"viewer", "data" : { "viewer_view_orders":"Ver Ordenes"}}, { "language":"es-US", "component":"viewer", "data" : { "viewer_view_orders":"Ver Ordenes"}},
{ "language":"es-US", "component":"xero", "data" : { "xero_connected_2xero":"Conectado a Xero!","xero_connecting_2xero":"Conectando a Xero.."}} { "language":"es-US", "component":"xero", "data" : { "xero_connected_2xero":"Conectado a Xero!","xero_connecting_2xero":"Conectando a Xero.."}}
] ]