Compare commits
176 commits
Author | SHA1 | Date | |
---|---|---|---|
1874f26ddb | |||
ca0037728b | |||
a3600d94ce | |||
0893ffe5a0 | |||
af8e4eccbb | |||
09c513b2b8 | |||
7b7ae8484b | |||
169443bc60 | |||
0ad94f9c42 | |||
6a5fc45c5c | |||
518dfd0ecb | |||
0ab816a8cd | |||
d67cddfcfd | |||
f54cc14e92 | |||
0d5fa1a666 | |||
a45cbed63c | |||
f387604a04 | |||
58a5ca5656 | |||
518828be9d | |||
179e90fa73 | |||
1ba8d2189a | |||
73bcf9fc15 | |||
7a4e8d278f | |||
b6eb402a39 | |||
98edbe2d45 | |||
b7d44e354d | |||
a8993c3e00 | |||
91110e2d89 | |||
fdfc679b03 | |||
299cae0c80 | |||
4f498c4c49 | |||
d5a78dd9b6 | |||
e671967ba8 | |||
e33e0a7f36 | |||
84c31bc824 | |||
a05b76ebed | |||
2cd9ded783 | |||
9a501e9665 | |||
cb8df58cfc | |||
9f7a10bcd3 | |||
c9bf50170d | |||
92865a6ee3 | |||
2cd0ee76c0 | |||
b88a8f4a86 | |||
3535e1b43f | |||
d284a736f6 | |||
2c04145a43 | |||
54eff47d3e | |||
28012ee2a9 | |||
8628f79043 | |||
45ad8d8e6a | |||
313b68b6c6 | |||
1f2510f522 | |||
e0e8c60af4 | |||
31cd5b9865 | |||
dfec2fee3c | |||
1e0286fd74 | |||
d2f963fbfc | |||
c99908807f | |||
3810900036 | |||
96eb3eb7f6 | |||
624fbf27e8 | |||
040fc22e69 | |||
a0291fb05e | |||
3479c0c206 | |||
83bc383675 | |||
fe6d27d4a6 | |||
225a4ae881 | |||
df8244f882 | |||
53ba8bdce2 | |||
ae4396f6b4 | |||
e3e0b1c48f | |||
2070a35301 | |||
5642788681 | |||
cc0a0171ff | |||
a8bcffa049 | |||
4b4a630304 | |||
67032ec81c | |||
299ef37f69 | |||
38c1d01bbc | |||
d65f39faeb | |||
633e7c733b | |||
1cec5204ab | |||
23532f12a2 | |||
5823da0d5b | |||
1dddcb74ff | |||
10963a3817 | |||
46bec965e9 | |||
277f148af8 | |||
73e4f32a27 | |||
7351ea5d2d | |||
f86249a0ec | |||
84820ffeff | |||
d14f47cc8b | |||
d93c95558f | |||
3bb7e86896 | |||
2c4da776ca | |||
d11bc8667d | |||
8c7d6bddbd | |||
efa3b11634 | |||
f4b8703fdd | |||
1335f6fd85 | |||
458647d81b | |||
11119fd9ae | |||
acae7d827c | |||
0af45e52ee | |||
8724d54c82 | |||
8949001306 | |||
adefcafae6 | |||
07765ea87b | |||
e171406769 | |||
724f775121 | |||
5b02ef0b0c | |||
cbc3723814 | |||
8b7172f8ab | |||
4780c64dcf | |||
55520fb41f | |||
1f39c6f8f9 | |||
14bb45cb95 | |||
04ae91b9b7 | |||
d66b956773 | |||
75e83ac339 | |||
d3437974e4 | |||
b6502a3f36 | |||
fda0128767 | |||
cc881b38a1 | |||
f80232d911 | |||
53c3d5e78e | |||
d4cdcd2a9a | |||
da4413af85 | |||
41b899b361 | |||
98d9360aad | |||
e78d4efa46 | |||
9f2afbbff9 | |||
21b1866a09 | |||
3936371c97 | |||
72f4d676f0 | |||
7c9b4ef43a | |||
dcaec846c9 | |||
e4eeacf2cd | |||
e9eda2d30c | |||
8679dc1b67 | |||
bcfea17dbc | |||
5bad5bbca5 | |||
12dbdd999d | |||
87ef9ea10a | |||
9c7140e3ff | |||
c8f6010f50 | |||
ce0f85f8dd | |||
072da66c10 | |||
64094fc057 | |||
8e04755cd4 | |||
ab11c949eb | |||
48cc58a8f9 | |||
0eb84b8f7c | |||
e332f011b2 | |||
d840b4c03c | |||
3a8791cb8b | |||
fe95a60f46 | |||
a8ec3f22c6 | |||
59847096d0 | |||
f7749cb2f7 | |||
3053d17740 | |||
152bddca3b | |||
ebd62fc176 | |||
8a0ceedc90 | |||
5f05de246d | |||
a43c21604a | |||
24bbbbab72 | |||
ee539f66a6 | |||
2eef36c33d | |||
7ef0e16df5 | |||
451bf6745c | |||
7516eaf11f | |||
80798093dd | |||
9c6bd6f8a6 |
126 changed files with 14901 additions and 14718 deletions
150
CHANGELOG.md
150
CHANGELOG.md
|
@ -3,18 +3,166 @@ All notable changes to this project will be documented in this file.
|
|||
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [Unreleased]
|
||||
## [2.4.1] - 2024-01-31
|
||||
|
||||
### Changed
|
||||
|
||||
- Updated to Angular 17
|
||||
- Updated to Node 20
|
||||
|
||||
## [2.4.0] - 2023-10-26
|
||||
|
||||
### Added
|
||||
|
||||
- Tip component
|
||||
|
||||
### Changed
|
||||
|
||||
- Added settings for tips, tax and VAT rates.
|
||||
- Added fields for tips, tax and VAT to `order.model`
|
||||
- Added a display of taxes to orders
|
||||
- Added a tip display to receipts
|
||||
|
||||
## [2.3.1] - 2023-06-26
|
||||
|
||||
### Fixed
|
||||
|
||||
- Broken wallet link for invoices
|
||||
|
||||
## [2.3.0] - 2023-06-26
|
||||
|
||||
### Changed
|
||||
|
||||
- Modified order to handle new `token` field.
|
||||
- Modified order service to query API using `token`.
|
||||
- Modified receipt component to use the new `token`.
|
||||
- Modified invoice component to use the new `token`.
|
||||
- Modified payment service component to remove order-creation logic.
|
||||
|
||||
### Fixed
|
||||
|
||||
- Receipt prompt textarea is now read-only.
|
||||
- Invoice prompt textarea is now read-only.
|
||||
- Button text color is now correct for Invoice and Receipt.
|
||||
|
||||
## [2.2.0] - 2023-05-15
|
||||
|
||||
### Added
|
||||
|
||||
- New API calls for requesting language data for login page
|
||||
|
||||
### Changed
|
||||
|
||||
- Owner model modified to remove unnecessary fields
|
||||
- Fullnode service uses `session` for API calls.
|
||||
- User service uses `session` for API calls.
|
||||
- Auth-guard service uses new `checkUser` function to confirm session exists and is validated.
|
||||
|
||||
### Fixed
|
||||
|
||||
- Business sign-up stepper skipping is corrected
|
||||
|
||||
## [2.1.0] - 2023-05-02
|
||||
|
||||
### Added
|
||||
|
||||
- New dialog to purchase sessions ahead of expiration.
|
||||
|
||||
## [2.0.0] - 2023-03-16
|
||||
|
||||
### Added
|
||||
|
||||
- Added the Xero invoice number in the memo for invoice payments.
|
||||
|
||||
### Changed
|
||||
|
||||
- Various look and feel changes to support the latest version of Angular.
|
||||
|
||||
### Fixed
|
||||
|
||||
- Correct display of translated phrases in various components.
|
||||
|
||||
## [2.0.0-beta] - 2023-02-23
|
||||
|
||||
### Added
|
||||
|
||||
- Service to request language tokens from server
|
||||
|
||||
### Changed
|
||||
|
||||
- Parametrization of text elements
|
||||
|
||||
## [1.4.1] - 2023-01-09
|
||||
|
||||
### Added
|
||||
|
||||
- Display app version
|
||||
|
||||
### Changed
|
||||
|
||||
- Copyright year
|
||||
|
||||
### Fixed
|
||||
|
||||
- Remove unnecessary logging in `fullnode.service.ts`.
|
||||
|
||||
## [1.4.0] - 2023-01-09
|
||||
|
||||
### Added
|
||||
|
||||
- Support for WooComerce:
|
||||
- New tab in Settings to generate authentication token.
|
||||
- Display of WooCommerce credentials for configuration.
|
||||
- New service to interact with WooCommerce-related API endpoints.
|
||||
- A "Return To Shop" button added to ZGo Invoice component
|
||||
|
||||
## [1.3.2] - 2022-10-11
|
||||
|
||||
### Added
|
||||
|
||||
- New component added to export orders in CSV format. Allows users to download orders.
|
||||
|
||||
## [1.3.1] - 2022-10-08
|
||||
|
||||
### Fixed
|
||||
|
||||
- Bug [#7](https://gitlab.com/pitmutt/zgo/-/issues/7) for saving a viewing key.
|
||||
|
||||
## [1.3.0] - 2022-10-01
|
||||
|
||||
### Added
|
||||
|
||||
- Added new connection for Xero account code
|
||||
- Added new service for Xero integration
|
||||
|
||||
### Changed
|
||||
|
||||
- Login updated to price sessions in USD and include the Pro service.
|
||||
- Settings component updated for compatibility with Android devices
|
||||
- Settings component updated to use observable when saving Account Code
|
||||
- xeroService's saveAccountCode function optimized to export observable
|
||||
- Field for Xero's AccountCode added to Settings component's integration tab
|
||||
- Listorders component updated to show date in ANSI international format.
|
||||
- Settings component updated to use owner's invoices field to control
|
||||
integrations tab (Pro version)
|
||||
- Orders list updated to show payment confirmation only when service is
|
||||
activated and a viewing key exists.
|
||||
- Updated Order and Owner model to include new Xero integration fields
|
||||
|
||||
## [1.2.2] - 2022-08-05
|
||||
|
||||
### Added
|
||||
|
||||
- Convenience buttons on checkout for wallets that are not ZIP-321-compliant
|
||||
- PmtService Component first alpha version ready for testing
|
||||
- Add `crmToken` field to `owner.model.ts`
|
||||
- Add `externalInvoice` field and `shortCode` field to `order.model.ts`
|
||||
|
||||
### Fixed
|
||||
|
||||
- Memo for checkout orders
|
||||
|
||||
|
||||
## [1.2.1] - 2022-08-01
|
||||
|
||||
### Changed
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
# ZGo - The Zcash Register
|
||||
|
||||
[![Please don't upload to GitHub](https://nogithub.codeberg.page/badge.svg)](https://nogithub.codeberg.page)
|
||||
|
||||
A Point-of-Sale application for accepting payments in [Zcash](https://z.cash/)
|
||||
|
||||
Visit our [ZGo Homepage](https://zgo.cash/) for more details.
|
||||
|
|
10
angular.json
10
angular.json
|
@ -39,8 +39,8 @@
|
|||
"budgets": [
|
||||
{
|
||||
"type": "initial",
|
||||
"maximumWarning": "500kb",
|
||||
"maximumError": "1mb"
|
||||
"maximumWarning": "5mb",
|
||||
"maximumError": "10mb"
|
||||
},
|
||||
{
|
||||
"type": "anyComponentStyle",
|
||||
|
@ -71,10 +71,10 @@
|
|||
"builder": "@angular-devkit/build-angular:dev-server",
|
||||
"configurations": {
|
||||
"production": {
|
||||
"browserTarget": "zgo:build:production"
|
||||
"buildTarget": "zgo:build:production"
|
||||
},
|
||||
"development": {
|
||||
"browserTarget": "zgo:build:development"
|
||||
"buildTarget": "zgo:build:development"
|
||||
}
|
||||
},
|
||||
"defaultConfiguration": "development"
|
||||
|
@ -82,7 +82,7 @@
|
|||
"extract-i18n": {
|
||||
"builder": "@angular-devkit/build-angular:extract-i18n",
|
||||
"options": {
|
||||
"browserTarget": "zgo:build"
|
||||
"buildTarget": "zgo:build"
|
||||
}
|
||||
},
|
||||
"test": {
|
||||
|
|
829
languages.csv
Normal file
829
languages.csv
Normal file
|
@ -0,0 +1,829 @@
|
|||
"encode_id","view_name","view_element","view_element_text"
|
||||
"br-US","business","business_accept_terms","Eu aceito os "
|
||||
"br-US","business","business_addrs_nobiz","Não temos um negócio associado a este endereço Zcash, por favor insira suas informações abaixo:"
|
||||
"br-US","business","business_biz_addressholder","Endereço"
|
||||
"br-US","business","business_biz_addresslbl","Endereço:"
|
||||
"br-US","business","business_biz_cityholder","Cidade"
|
||||
"br-US","business","business_biz_citylbl","Cidade:"
|
||||
"br-US","business","business_biz_countryholder","País"
|
||||
"br-US","business","business_biz_countrylbl","País:"
|
||||
"br-US","business","business_biz_info","Insira os dados da empresa"
|
||||
"br-US","business","business_biz_mailholder","exemplo@dominio.com"
|
||||
"br-US","business","business_biz_maillbl","E-mail"
|
||||
"br-US","business","business_biz_nameholder","Nome da empresa"
|
||||
"br-US","business","business_biz_namelbl","Nome da empresa:"
|
||||
"br-US","business","business_biz_pcodeholder","Código Postal"
|
||||
"br-US","business","business_biz_pcodelbl","Código postal:"
|
||||
"br-US","business","business_biz_stateholder","Estado/Provincia"
|
||||
"br-US","business","business_biz_statelbl","Estado/Provincia"
|
||||
"br-US","business","business_biz_websiteholder","Website"
|
||||
"br-US","business","business_biz_websitelbl","Website"
|
||||
"br-US","business","business_contact_fnamelbl","Primeiro nome do contato:"
|
||||
"br-US","business","business_contact_fnholder","Nome"
|
||||
"br-US","business","business_contact_lnamelbl","Último sobrenome do contato:"
|
||||
"br-US","business","business_contact_lnholder","Sobrenome "
|
||||
"br-US","business","business_save_btn","Salvar"
|
||||
"br-US","business","business_select_session","Selecione a duração da sessão que você necessita:"
|
||||
"br-US","business","business_session_label","Sessão:"
|
||||
"br-US","business","business_session_lengthlbl","Duração da sessão"
|
||||
"br-US","business","business_session_paylbl","Pagar"
|
||||
"br-US","business","business_signup_title","Inscrição de negócio"
|
||||
"br-US","business","business_terms_ofuse","Termos de Uso"
|
||||
"br-US","business","business_zgo_confirmlbl","ZGo confirma o seu pagamento"
|
||||
"br-US","cancel","cancel_confirm_btn","Confirmar"
|
||||
"br-US","cancel","cancel_dismiss_btn","Descartar"
|
||||
"br-US","cancel","cancel_title","Cancelar"
|
||||
"br-US","checkout","checkout_accept_btn","Aceitar"
|
||||
"br-US","checkout","checkout_cant_scan","Não consegue escanear?"
|
||||
"br-US","checkout","checkout_close_btn","Fechar"
|
||||
"br-US","checkout","checkout_copyaddress_error","Erro ao copiar endereço"
|
||||
"br-US","checkout","checkout_copyamount_error","Erro ao copiar o valor"
|
||||
"br-US","checkout","checkout_copymemo_error","Erro ao copiar o memorando"
|
||||
"br-US","checkout","checkout_copy_address","Copiar Endereço"
|
||||
"br-US","checkout","checkout_copy_amount","Copiar Valor"
|
||||
"br-US","checkout","checkout_copy_memo","Copiar Memo"
|
||||
"br-US","checkout","checkout_copy_notavail","Funcionalidade de cópia não suportada!!"
|
||||
"br-US","checkout","checkout_notserv_close","Fechar"
|
||||
"br-US","checkout","checkout_notserv_error","Erro"
|
||||
"br-US","checkout","checkout_scan_payment","Escaneie para fazer o pagamento"
|
||||
"br-US","checkout","checkout_use_this","Use este/isso"
|
||||
"br-US","checkout","checkout_wallet_link","link de carteira"
|
||||
"br-US","checkout","checkout_wallet_or",", ou "
|
||||
"br-US","dbexport","dbexport_btn_close","Cancelar"
|
||||
"br-US","dbexport","dbexport_closed_no","Não"
|
||||
"br-US","dbexport","dbexport_closed_yes","Sim"
|
||||
"br-US","dbexport","dbexport_date_range","Intervalo de datas:"
|
||||
"br-US","dbexport","dbexport_download_link","Download"
|
||||
"br-US","dbexport","dbexport_end_date","Data de término"
|
||||
"br-US","dbexport","dbexport_export_descrip","Exportar pedidos em um arquivo de formato .CSV"
|
||||
"br-US","dbexport","dbexport_file_header","""Data"",""ID do pedido"",""Moeda"",""Fechado?"",""Valor"",""Taxa"",""ZEC"",""Pago?"",""Fatura"""
|
||||
"br-US","dbexport","dbexport_invalid_end","Data final inválida"
|
||||
"br-US","dbexport","dbexport_invalid_start","Data de início inválida"
|
||||
"br-US","dbexport","dbexport_noorders_created","Você não tem pedidos criados."
|
||||
"br-US","dbexport","dbexport_nothing_todo","Nada para fazer."
|
||||
"br-US","dbexport","dbexport_paid_no","Não"
|
||||
"br-US","dbexport","dbexport_paid_yes","Sim"
|
||||
"br-US","dbexport","dbexport_settings_title","Exportar pedidos"
|
||||
"br-US","dbexport","dbexport_start_date","Data de início"
|
||||
"br-US","header","header_get_currency","Moeda:"
|
||||
"br-US","header","header_last_block","Último Bloco:"
|
||||
"br-US","invoice","invoice_cant_scan","Não consegue escanear?"
|
||||
"br-US","invoice","invoice_copyaddress_error","Erro ao copiar endereço"
|
||||
"br-US","invoice","invoice_copyamount_error","Erro ao copiar o valor"
|
||||
"br-US","invoice","invoice_copymemo_error","Erro ao copiar o memorando"
|
||||
"br-US","invoice","invoice_copy_address","Copiar Endereço"
|
||||
"br-US","invoice","invoice_copy_amount","Copiar Valor"
|
||||
"br-US","invoice","invoice_copy_memo","Copiar Memo"
|
||||
"br-US","invoice","invoice_copy_notavail","Funcionalidade de cópia não suportada"
|
||||
"br-US","invoice","invoice_dot_or",", ou"
|
||||
"br-US","invoice","invoice_info_notavail","Não há informação disponível."
|
||||
"br-US","invoice","invoice_invalid_id","ID do fatura incorreto."
|
||||
"br-US","invoice","invoice_invoice_lbl","Fatura"
|
||||
"br-US","invoice","invoice_invoice_total","Total da Fatura:"
|
||||
"br-US","invoice","invoice_notserv_close","Fechar"
|
||||
"br-US","invoice","invoice_notserv_error","Erro"
|
||||
"br-US","invoice","invoice_order_date","Data: "
|
||||
"br-US","invoice","invoice_order_id","ID do Pedido: "
|
||||
"br-US","invoice","invoice_order_price","Preço "
|
||||
"br-US","invoice","invoice_payment_confirmed","Pagamento Confirmado!!"
|
||||
"br-US","invoice","invoice_payment_pending","Pagamento Pendente!!"
|
||||
"br-US","invoice","invoice_qty_lbl","Qtde."
|
||||
"br-US","invoice","invoice_return_toshop","Voltar à Loja"
|
||||
"br-US","invoice","invoice_scan_qrcode","Escaneie o QR Code com sua carteira para efetuar o pagamento"
|
||||
"br-US","invoice","invoice_use_this","Use isso "
|
||||
"br-US","invoice","invoice_wallet_link","Link da Carteira"
|
||||
"br-US","invoice","invoice_zcash_price","Preço da Zcash: "
|
||||
"br-US","itemadd","itemadd_add_2order","Adicionar Item ao Pedido"
|
||||
"br-US","itemadd","itemadd_cancel_btn","Cancelar"
|
||||
"br-US","itemadd","itemadd_save_btn","Adicionar"
|
||||
"br-US","itemcreate","itemcreate_add_item","Adicionar Item"
|
||||
"br-US","itemcreate","itemcreate_close_btn","Fechar"
|
||||
"br-US","itemcreate","itemcreate_item_descr","Descrição"
|
||||
"br-US","itemcreate","itemcreate_item_lbl","Item"
|
||||
"br-US","itemcreate","itemcreate_item_price","Preço"
|
||||
"br-US","itemcreate","itemcreate_save_btn","Salvar"
|
||||
"br-US","itemcreate","itemcreate_use_nums","Use apenas números"
|
||||
"br-US","itemdel","itemdel_close_btn","Fechar"
|
||||
"br-US","itemdel","itemdel_confirm_del","Tem certeza de que deseja apagar "
|
||||
"br-US","itemdel","itemdel_delete_btn","Excluir"
|
||||
"br-US","itemdel","itemdel_del_item","Excluir Item"
|
||||
"br-US","itemedit","itemedit_close_btn","Fechar"
|
||||
"br-US","itemedit","itemedit_edit_item","Editar Item"
|
||||
"br-US","itemedit","itemedit_item_descr","Descrição "
|
||||
"br-US","itemedit","itemedit_item_label","Item"
|
||||
"br-US","itemedit","itemedit_item_price","Preço:"
|
||||
"br-US","itemedit","itemedit_save_btn","Salvar"
|
||||
"br-US","itemlist","itemlist_avail_items","Items disponíveis:"
|
||||
"br-US","itemlist","itemlist_list_empty","Ainda não há itens"
|
||||
"br-US","listorders","listorders_backtoshop_btn","Voltar a Loja"
|
||||
"br-US","listorders","listorders_export_orders","Exportar Pedidos"
|
||||
"br-US","listorders","listorders_invoice_btn","Fatura"
|
||||
"br-US","listorders","listorders_item_lbl","Item"
|
||||
"br-US","listorders","listorders_no_orders","Não há Pedidos"
|
||||
"br-US","listorders","listorders_order_id","ID do Pedido"
|
||||
"br-US","listorders","listorders_order_total","Total do Pedido:"
|
||||
"br-US","listorders","listorders_overall_total","Total geral: "
|
||||
"br-US","listorders","listorders_qty_lbl","Qtde."
|
||||
"br-US","listorders","listorders_receipt_btn","Comprovante"
|
||||
"br-US","listorders","listorders_todays_total","Total de hoje: "
|
||||
"br-US","listorders","listorders_total_lbl","Total"
|
||||
"br-US","login","login_check_wallet","Verifique sua carteira!!"
|
||||
"br-US","login","login_confirm_login","ZGo confirma seu login na blockchain da Zcash"
|
||||
"br-US","login","login_confirm_pin","Confirmar Senha"
|
||||
"br-US","login","login_connect_to_zgo","Conecte sua carteira ao ZGo"
|
||||
"br-US","login","login_enter_pin","Insira a senha enviada pela ZGo para confirmar a propriedade da carteira:"
|
||||
"br-US","login","login_last_block","Último bloco visto:"
|
||||
"br-US","login","login_link_wallet","Conecte sua carteira"
|
||||
"br-US","login","login_wrong_pin","Senha incorreta!"
|
||||
"br-US","main","main_price_data","Preços informados pela CoinGecko API"
|
||||
"br-US","order","order_cancel_btn","Cancelar"
|
||||
"br-US","order","order_cancel_ok","Pedido cancelado com sucesso!"
|
||||
"br-US","order","order_cancel_order","Cancelar o pedido?"
|
||||
"br-US","order","order_checkout_btn","Procesar"
|
||||
"br-US","order","order_confirm_cancel","Tem certeza que deseja cancelar o pedido?"
|
||||
"br-US","order","order_confirm_remove","Tem certeza que deseja remover <<"
|
||||
"br-US","order","order_confirm_remove1"," deste pedido?"
|
||||
"br-US","order","order_invoice_btn","Fatura"
|
||||
"br-US","order","order_item_lbl","Item"
|
||||
"br-US","order","order_notserv_close","Fechar"
|
||||
"br-US","order","order_notserv_success","succeso"
|
||||
"br-US","order","order_no_openorder","Sem pedido aberto!!"
|
||||
"br-US","order","order_qty_lbl","Qtde."
|
||||
"br-US","order","order_remove_item","Remover o Item?"
|
||||
"br-US","order","order_total_lbl","Total"
|
||||
"br-US","order","order_total_title","Total do Pedido:"
|
||||
"br-US","pmtservice","pmtservice_amount_doesnot","O Valor não"
|
||||
"br-US","pmtservice","pmtservice_cant_scan","Não consegue escanear?"
|
||||
"br-US","pmtservice","pmtservice_connecto_xero","Conexão para o Xero"
|
||||
"br-US","pmtservice","pmtservice_copyaddress_error","Erro ao copiar endereço"
|
||||
"br-US","pmtservice","pmtservice_copyamount_error","Erro ao copiar o valor"
|
||||
"br-US","pmtservice","pmtservice_copymemo_error","Erro ao copiar o memorando"
|
||||
"br-US","pmtservice","pmtservice_copy_address","Copiar Endereço"
|
||||
"br-US","pmtservice","pmtservice_copy_amount","Copiar Valor"
|
||||
"br-US","pmtservice","pmtservice_copy_memo","Copiar Memo"
|
||||
"br-US","pmtservice","pmtservice_copy_notavail","Funcionalidade de cópia não suportada"
|
||||
"br-US","pmtservice","pmtservice_currency_notsup","não suportada!!"
|
||||
"br-US","pmtservice","pmtservice_enabled_for","habilitado para"
|
||||
"br-US","pmtservice","pmtservice_hdr_txt1","Fatura"
|
||||
"br-US","pmtservice","pmtservice_hdr_txt2","ID do Pedido: "
|
||||
"br-US","pmtservice","pmtservice_hdr_txt3","Data: "
|
||||
"br-US","pmtservice","pmtservice_invalid_ownerid","ID do proprietário inválido!!"
|
||||
"br-US","pmtservice","pmtservice_invoice_currency","Moeda"
|
||||
"br-US","pmtservice","pmtservice_invoice_invalid","tipo inválido!!"
|
||||
"br-US","pmtservice","pmtservice_invoice_item","Item:"
|
||||
"br-US","pmtservice","pmtservice_invoice_notfound","não encontrada!!"
|
||||
"br-US","pmtservice","pmtservice_invoice_num","Fatura"
|
||||
"br-US","pmtservice","pmtservice_invoice_paid","já pago!!"
|
||||
"br-US","pmtservice","pmtservice_invoice_price","Preço"
|
||||
"br-US","pmtservice","pmtservice_invoice_qty","Qtde."
|
||||
"br-US","pmtservice","pmtservice_invoice_total","Total da Fatura:"
|
||||
"br-US","pmtservice","pmtservice_match_value","corresponde ao valor"
|
||||
"br-US","pmtservice","pmtservice_notserv_close","Fechar"
|
||||
"br-US","pmtservice","pmtservice_notserv_error","Erro"
|
||||
"br-US","pmtservice","pmtservice_payment_confirmed","Pagamento Confirmado!!"
|
||||
"br-US","pmtservice","pmtservice_payment_notprocessed","Pedido de pagamento não foi processado!!"
|
||||
"br-US","pmtservice","pmtservice_payment_pending","Pagamento Pendente!!"
|
||||
"br-US","pmtservice","pmtservice_pmtsrv_not","Serviço de pagamento não"
|
||||
"br-US","pmtservice","pmtservice_reported_byxero","reportado por Xero!!"
|
||||
"br-US","pmtservice","pmtservice_scan_qrcode","Escaneie o QR Code com sua carteira para efetuar o pagamento"
|
||||
"br-US","pmtservice","pmtservice_server_failed","servidor falhou!!"
|
||||
"br-US","pmtservice","pmtservice_use_this","Use isso"
|
||||
"br-US","pmtservice","pmtservice_wallet_link","Link da Carteira"
|
||||
"br-US","pmtservice","pmtservice_zecdata_price","Preço da Zcash:"
|
||||
"br-US","pmtservice","pmtservice_zecdata_total","Total: "
|
||||
"br-US","promptinvoice","promptinvoice_func_notavail","Funcionalidade não disponível para o seu navegador. Use o botão enviar ao invés disso"
|
||||
"br-US","promptinvoice","promptinvoice_invoice_cancel","Cancelar"
|
||||
"br-US","promptinvoice","promptinvoice_invoice_clipboard","URL da fatura copiado para a área de transferência!!"
|
||||
"br-US","promptinvoice","promptinvoice_invoice_sent","Enviado!"
|
||||
"br-US","promptinvoice","promptinvoice_invoice_url","URL da Fatura:"
|
||||
"br-US","promptinvoice","promptinvoice_notserv_close","Fechar"
|
||||
"br-US","promptinvoice","promptinvoice_notserv_error","Erro"
|
||||
"br-US","promptinvoice","promptinvoice_notserv_success","Suceso"
|
||||
"br-US","promptinvoice","promptinvoice_send_link","Envie o link da fatura para o seu cliente:"
|
||||
"br-US","promptreceipt","promptreceipt_close_lbl","Fechar"
|
||||
"br-US","promptreceipt","promptreceipt_func_notavail","Funcionalidade não disponível para o seu navegador. Use o botão Enviar"
|
||||
"br-US","promptreceipt","promptreceipt_notserv_close","Fechar"
|
||||
"br-US","promptreceipt","promptreceipt_notserv_error","Erro"
|
||||
"br-US","promptreceipt","promptreceipt_notserv_success","Sucesso"
|
||||
"br-US","promptreceipt","promptreceipt_receipt_clipboard","URL do comprovante foi copiado para a área de transferência!!"
|
||||
"br-US","promptreceipt","promptreceipt_receipt_url","URL do comprovante:"
|
||||
"br-US","promptreceipt","promptreceipt_send_link","Envie o link do comprovante para o seu cliente:"
|
||||
"br-US","receipt","receipt_info_notavail","Não há informação disponível."
|
||||
"br-US","receipt","receipt_invalid_id","ID do comprovante incorreto."
|
||||
"br-US","receipt","receipt_order_date","Data:"
|
||||
"br-US","receipt","receipt_order_id","ID do Pedido:"
|
||||
"br-US","receipt","receipt_order_price","Preço:"
|
||||
"br-US","receipt","receipt_order_total","Total:"
|
||||
"br-US","receipt","receipt_qty_lbl","Qtde."
|
||||
"br-US","receipt","receipt_receipt_lbl","Comprovante"
|
||||
"br-US","receipt","receipt_zcash_price","Preço da Zcash:"
|
||||
"br-US","receiptqr","receiptqr_close_btn","Fechar"
|
||||
"br-US","receiptqr","receiptqr_scan_receipt","Escaneie para o seu comprovante"
|
||||
"br-US","scan","scan_close_btn","Fechar"
|
||||
"br-US","scan","scan_copy_address","Copiar Endereço"
|
||||
"br-US","scan","scan_copy_amount","Copiar Valor"
|
||||
"br-US","scan","scan_copy_error","Falha ao copiar o valor"
|
||||
"br-US","scan","scan_copy_memo","Copiar Memo"
|
||||
"br-US","scan","scan_fail_payment","Erro ao verificar o pagamento"
|
||||
"br-US","scan","scan_func_notavail","Funcionalidade de cópia não suportada"
|
||||
"br-US","scan","scan_memo_sent","Memorando enviado!"
|
||||
"br-US","scan","scan_notserv_close","Fechar"
|
||||
"br-US","scan","scan_notserv_error","Erro"
|
||||
"br-US","scan","scan_scanqr_code","Scanei o QR Code"
|
||||
"br-US","scan","scan_text_info","Certifique-se de selecionar ""Incluir Responder-A"" na sua carteira antes de enviar o seu memorando."
|
||||
"br-US","scan","scan_use_this","Não consegue escanear ? Use isso"
|
||||
"br-US","scan","scan_wallet_link","Link de carteira"
|
||||
"br-US","settings","settings_acode_invalid","Número da Conta inválido (10 caracteres no máximo)"
|
||||
"br-US","settings","settings_acode_lbl","Número da conta:"
|
||||
"br-US","settings","settings_acode_notsaved","Número da Conta não salvo!!"
|
||||
"br-US","settings","settings_acode_saved","Número da conta Salvo!!"
|
||||
"br-US","settings","settings_close_btn","Cancelar"
|
||||
"br-US","settings","settings_confirm_payments","Confirmar pagamentos?"
|
||||
"br-US","settings","settings_copy_notavail","Funcionalidade não disponível para o seu navegador. Use o botão enviar ao invés disso"
|
||||
"br-US","settings","settings_currency_lbl","Moeda"
|
||||
"br-US","settings","settings_link_2xero","Conectar-se ao Xero"
|
||||
"br-US","settings","settings_name_lbl","Nome"
|
||||
"br-US","settings","settings_name_placeholder","Seu nome"
|
||||
"br-US","settings","settings_notserv_close","Fechar"
|
||||
"br-US","settings","settings_notserv_error","Erro"
|
||||
"br-US","settings","settings_notserv_success","Sucesso"
|
||||
"br-US","settings","settings_notserv_warning","Aviso"
|
||||
"br-US","settings","settings_ownerid_copied","ID do proprietário copiado para a prancheta"
|
||||
"br-US","settings","settings_ownerid_notcopied","Cópia não disponível em seu navegador"
|
||||
"br-US","settings","settings_pmtserv_url","URL de Serviço de Pagamento:"
|
||||
"br-US","settings","settings_relink_2xero","Reconectar-se ao Xero "
|
||||
"br-US","settings","settings_save_btn","Salvar"
|
||||
"br-US","settings","settings_tab_integrations","Integrações"
|
||||
"br-US","settings","settings_tab_mainlbl","Principal"
|
||||
"br-US","settings","settings_url_copied","URL ZGo copiado para a prancheta!!"
|
||||
"br-US","settings","settings_use_satoshi","Usar zatoshis?"
|
||||
"br-US","settings","settings_view_title","Definições"
|
||||
"br-US","settings","settings_vkey_lbl","Chave de visualização"
|
||||
"br-US","settings","settings_vkey_placeholder","Sua chave de visualização da carteira"
|
||||
"br-US","settings","settings_wctoken_copied","Token WooCommerce copiado para a prancheta"
|
||||
"br-US","settings","settings_wctoken_generated","Token da WoCommerce gerado"
|
||||
"br-US","settings","settings_wctoken_genfail","Geração do token da WooCommerce falhou"
|
||||
"br-US","settings","settings_wctoken_notcopied","Cópia não disponível no seu navegador"
|
||||
"br-US","settings","settings_wc_closebtn","Fechar"
|
||||
"br-US","settings","settings_wc_gentoken","Gerar Token"
|
||||
"br-US","settings","settings_wc_lbl","WooCommerce"
|
||||
"br-US","settings","settings_wc_ownerlbl","Proprietário:"
|
||||
"br-US","settings","settings_xeropmt_confirmdis","Confirmação de pagamentos Xero desativada!! "
|
||||
"br-US","settings","settings_xero_closebtn","Fechar"
|
||||
"br-US","settings","settings_xero_lbl","Xero"
|
||||
"br-US","settings","settings_xero_savebtn","Salvar código"
|
||||
"br-US","viewer","viewer_view_orders","Ver Pedidos"
|
||||
"br-US","xero","xero_connected_2xero","Conectado ao Xero!"
|
||||
"br-US","xero","xero_connecting_2xero","Conectando ao Xero.."
|
||||
"en-US","business","business_accept_terms","I accept the "
|
||||
"en-US","business","business_addrs_nobiz","We do not have a business associated with this Zcash address, please enter your information below:"
|
||||
"en-US","business","business_biz_addressholder","Address"
|
||||
"en-US","business","business_biz_addresslbl","Address:"
|
||||
"en-US","business","business_biz_cityholder","City"
|
||||
"en-US","business","business_biz_citylbl","City:"
|
||||
"en-US","business","business_biz_countryholder","Country"
|
||||
"en-US","business","business_biz_countrylbl","Country:"
|
||||
"en-US","business","business_biz_info","Provide business info"
|
||||
"en-US","business","business_biz_mailholder","example@domain.com"
|
||||
"en-US","business","business_biz_maillbl","E-mail:"
|
||||
"en-US","business","business_biz_nameholder","Business name"
|
||||
"en-US","business","business_biz_namelbl","Business Name:"
|
||||
"en-US","business","business_biz_pcodeholder","Postal code"
|
||||
"en-US","business","business_biz_pcodelbl","Postal Code:"
|
||||
"en-US","business","business_biz_stateholder","State or Province"
|
||||
"en-US","business","business_biz_statelbl","State/Province:"
|
||||
"en-US","business","business_biz_websiteholder","website"
|
||||
"en-US","business","business_biz_websitelbl","Website:"
|
||||
"en-US","business","business_contact_fnamelbl","Contact First name:"
|
||||
"en-US","business","business_contact_fnholder","First name"
|
||||
"en-US","business","business_contact_lnamelbl","Contact Last Name:"
|
||||
"en-US","business","business_contact_lnholder","Last Name"
|
||||
"en-US","business","business_save_btn","Save"
|
||||
"en-US","business","business_select_session ","Please select the length of session that you need:"
|
||||
"en-US","business","business_session_label","Session:"
|
||||
"en-US","business","business_session_lengthlbl","Session Length"
|
||||
"en-US","business","business_session_paylbl","Pay"
|
||||
"en-US","business","business_signup_title","Business sign-up"
|
||||
"en-US","business","business_terms_ofuse","Terms of Use"
|
||||
"en-US","business","business_zgo_confirmlbl","ZGo confirms your payment"
|
||||
"en-US","cancel","cancel_confirm_btn","Confirm"
|
||||
"en-US","cancel","cancel_dismiss_btn","Dismiss"
|
||||
"en-US","cancel","cancel_title","Cancel"
|
||||
"en-US","checkout","checkout_accept_btn","Accept"
|
||||
"en-US","checkout","checkout_cant_scan","Can't scan?"
|
||||
"en-US","checkout","checkout_close_btn","Close"
|
||||
"en-US","checkout","checkout_copyaddress_error","Error copying address"
|
||||
"en-US","checkout","checkout_copyamount_error","Error while copying ammount"
|
||||
"en-US","checkout","checkout_copymemo_error","Error while copying Memo"
|
||||
"en-US","checkout","checkout_copy_address","Copy Address"
|
||||
"en-US","checkout","checkout_copy_amount","Copy Amount"
|
||||
"en-US","checkout","checkout_copy_memo","Copy Memo"
|
||||
"en-US","checkout","checkout_copy_notavail","Copy functionality not supported!!"
|
||||
"en-US","checkout","checkout_notserv_close","Close"
|
||||
"en-US","checkout","checkout_notserv_error","Error"
|
||||
"en-US","checkout","checkout_scan_payment","Scan to make payment"
|
||||
"en-US","checkout","checkout_use_this","Use this "
|
||||
"en-US","checkout","checkout_wallet_link","wallet link"
|
||||
"en-US","checkout","checkout_wallet_or",", or "
|
||||
"en-US","dbexport","dbexport_btn_close","Cancel"
|
||||
"en-US","dbexport","dbexport_closed_no","No"
|
||||
"en-US","dbexport","dbexport_closed_yes","Yes"
|
||||
"en-US","dbexport","dbexport_date_range","Date Range:"
|
||||
"en-US","dbexport","dbexport_download_link","Download"
|
||||
"en-US","dbexport","dbexport_end_date","End date"
|
||||
"en-US","dbexport","dbexport_export_descrip","Export orders in a .CSV format file"
|
||||
"en-US","dbexport","dbexport_file_header","""Date"",""Order ID"",""Currency"",""Closed?"",""Amount"",""Rate"",""ZEC"",""Paid?"",""Invoice"""
|
||||
"en-US","dbexport","dbexport_invalid_end","Invalid end date"
|
||||
"en-US","dbexport","dbexport_invalid_start","Invalid start date"
|
||||
"en-US","dbexport","dbexport_noorders_created","You have no orders created."
|
||||
"en-US","dbexport","dbexport_nothing_todo","Nothing to do."
|
||||
"en-US","dbexport","dbexport_paid_no","No"
|
||||
"en-US","dbexport","dbexport_paid_yes","Yes"
|
||||
"en-US","dbexport","dbexport_settings_title","Export Orders"
|
||||
"en-US","dbexport","dbexport_start_date","Start date"
|
||||
"en-US","header","header_get_currency","Currency:"
|
||||
"en-US","header","header_last_block","Last Block:"
|
||||
"en-US","invoice","invoice_cant_scan","Can't scan?"
|
||||
"en-US","invoice","invoice_copyaddress_error","Error while copying address"
|
||||
"en-US","invoice","invoice_copyamount_error","Error while copying amount"
|
||||
"en-US","invoice","invoice_copymemo_error","Error while copying Memo"
|
||||
"en-US","invoice","invoice_copy_address","Copy Address"
|
||||
"en-US","invoice","invoice_copy_amount","Copy Amount"
|
||||
"en-US","invoice","invoice_copy_memo","Copy Memo"
|
||||
"en-US","invoice","invoice_copy_notavail","Copy functionality not supported"
|
||||
"en-US","invoice","invoice_dot_or",", or"
|
||||
"en-US","invoice","invoice_info_notavail","No information available."
|
||||
"en-US","invoice","invoice_invalid_id","Incorrect Invoice ID."
|
||||
"en-US","invoice","invoice_invoice_lbl","Invoice"
|
||||
"en-US","invoice","invoice_invoice_total","Invoice Total: "
|
||||
"en-US","invoice","invoice_notserv_close","Close"
|
||||
"en-US","invoice","invoice_notserv_error","Error"
|
||||
"en-US","invoice","invoice_order_date","Date: "
|
||||
"en-US","invoice","invoice_order_id","Order ID: "
|
||||
"en-US","invoice","invoice_order_price","Price "
|
||||
"en-US","invoice","invoice_payment_confirmed","Payment Confirmed!!"
|
||||
"en-US","invoice","invoice_payment_pending","Payment Pending!!"
|
||||
"en-US","invoice","invoice_qty_lbl","Qty."
|
||||
"en-US","invoice","invoice_return_toshop","Return to Shop"
|
||||
"en-US","invoice","invoice_scan_qrcode","Scan the QR code with your wallet to make payment"
|
||||
"en-US","invoice","invoice_use_this","Use this "
|
||||
"en-US","invoice","invoice_wallet_link","wallet link"
|
||||
"en-US","invoice","invoice_zcash_price","Zcash price: "
|
||||
"en-US","itemadd","itemadd_add_2order","Add Item to Order"
|
||||
"en-US","itemadd","itemadd_cancel_btn","Cancel"
|
||||
"en-US","itemadd","itemadd_save_btn","Add"
|
||||
"en-US","itemcreate","itemcreate_add_item","Add Item"
|
||||
"en-US","itemcreate","itemcreate_close_btn","Close"
|
||||
"en-US","itemcreate","itemcreate_item_descr","Description"
|
||||
"en-US","itemcreate","itemcreate_item_lbl","Item"
|
||||
"en-US","itemcreate","itemcreate_item_price","Price"
|
||||
"en-US","itemcreate","itemcreate_save_btn","Save"
|
||||
"en-US","itemcreate","itemcreate_use_nums","Use only numbers"
|
||||
"en-US","itemdel","itemdel_close_btn","Close"
|
||||
"en-US","itemdel","itemdel_confirm_del","Are you sure you want to delete "
|
||||
"en-US","itemdel","itemdel_delete_btn","Delete"
|
||||
"en-US","itemdel","itemdel_del_item","Delete Item"
|
||||
"en-US","itemedit","itemedit_close_btn","Close"
|
||||
"en-US","itemedit","itemedit_edit_item","Edit Item"
|
||||
"en-US","itemedit","itemedit_item_descr","Description"
|
||||
"en-US","itemedit","itemedit_item_label","Item"
|
||||
"en-US","itemedit","itemedit_item_price","Price:"
|
||||
"en-US","itemedit","itemedit_save_btn","Save"
|
||||
"en-US","itemlist","itemlist_avail_items","Available Items:"
|
||||
"en-US","itemlist","itemlist_list_empty","No items yet!"
|
||||
"en-US","listorders","listorders_backtoshop_btn","Back to Shop"
|
||||
"en-US","listorders","listorders_export_orders","Export Orders"
|
||||
"en-US","listorders","listorders_invoice_btn","Invoice"
|
||||
"en-US","listorders","listorders_item_lbl","Item"
|
||||
"en-US","listorders","listorders_no_orders","No orders"
|
||||
"en-US","listorders","listorders_order_id","Order ID"
|
||||
"en-US","listorders","listorders_order_total","Order Total: "
|
||||
"en-US","listorders","listorders_overall_total","Overall Total: "
|
||||
"en-US","listorders","listorders_qty_lbl","Qty."
|
||||
"en-US","listorders","listorders_receipt_btn","Receipt"
|
||||
"en-US","listorders","listorders_todays_total","Today's Total: "
|
||||
"en-US","listorders","listorders_total_lbl","Total"
|
||||
"en-US","login","login_check_wallet","Check your wallet!!"
|
||||
"en-US","login","login_confirm_login","ZGo confirms your login on the Zcash blockhain"
|
||||
"en-US","login","login_confirm_pin","Confirm PIN"
|
||||
"en-US","login","login_connect_to_zgo","Connect your wallet to ZGo"
|
||||
"en-US","login","login_enter_pin","Enter the PIN sent by ZGo to confirm wallet ownership:"
|
||||
"en-US","login","login_last_block","Last block seen:"
|
||||
"en-US","login","login_link_wallet","Link Wallet"
|
||||
"en-US","login","login_wrong_pin","Wrong PIN!!"
|
||||
"en-US","main","main_price_data","Price data provided by CoinGecko API"
|
||||
"en-US","order","order_cancel_btn","Cancel"
|
||||
"en-US","order","order_cancel_ok","Order successfully cancelled!"
|
||||
"en-US","order","order_cancel_order","Cancel Order?"
|
||||
"en-US","order","order_checkout_btn","Checkout"
|
||||
"en-US","order","order_confirm_cancel","Are you sure you want to cancel the order?"
|
||||
"en-US","order","order_confirm_remove","Are you sure you want to remove "
|
||||
"en-US","order","order_confirm_remove1"," from this order?"
|
||||
"en-US","order","order_invoice_btn","Invoice"
|
||||
"en-US","order","order_item_lbl","Item"
|
||||
"en-US","order","order_notserv_close","Close"
|
||||
"en-US","order","order_notserv_success","success"
|
||||
"en-US","order","order_no_openorder","No open order!!"
|
||||
"en-US","order","order_qty_lbl","Qty."
|
||||
"en-US","order","order_remove_item","Remove Item?"
|
||||
"en-US","order","order_total_lbl","Total"
|
||||
"en-US","order","order_total_title","Order Total:"
|
||||
"en-US","pmtservice","pmtservice_amount_doesnot","Amount does not"
|
||||
"en-US","pmtservice","pmtservice_cant_scan","Can't scan?"
|
||||
"en-US","pmtservice","pmtservice_connecto_xero","Connection to Xero"
|
||||
"en-US","pmtservice","pmtservice_copyaddress_error","Error while copying address"
|
||||
"en-US","pmtservice","pmtservice_copyamount_error","Error while copying amount"
|
||||
"en-US","pmtservice","pmtservice_copymemo_error","Error while copying Memo"
|
||||
"en-US","pmtservice","pmtservice_copy_address","Copy Address"
|
||||
"en-US","pmtservice","pmtservice_copy_amount","Copy Amount"
|
||||
"en-US","pmtservice","pmtservice_copy_memo","Copy Memo"
|
||||
"en-US","pmtservice","pmtservice_copy_notavail","Copy functionality not supported"
|
||||
"en-US","pmtservice","pmtservice_currency_notsup","not supported!!"
|
||||
"en-US","pmtservice","pmtservice_enabled_for","enabled for"
|
||||
"en-US","pmtservice","pmtservice_hdr_txt1","Invoice"
|
||||
"en-US","pmtservice","pmtservice_hdr_txt2","Order ID: "
|
||||
"en-US","pmtservice","pmtservice_hdr_txt3","Date: "
|
||||
"en-US","pmtservice","pmtservice_invalid_ownerid","Invalid Owner ID!!"
|
||||
"en-US","pmtservice","pmtservice_invoice_currency","Currency"
|
||||
"en-US","pmtservice","pmtservice_invoice_invalid","type invalid!!"
|
||||
"en-US","pmtservice","pmtservice_invoice_item","Item:"
|
||||
"en-US","pmtservice","pmtservice_invoice_notfound","not found!!"
|
||||
"en-US","pmtservice","pmtservice_invoice_num","Invoice"
|
||||
"en-US","pmtservice","pmtservice_invoice_paid","already paid!!"
|
||||
"en-US","pmtservice","pmtservice_invoice_price","Price"
|
||||
"en-US","pmtservice","pmtservice_invoice_qty","Qty."
|
||||
"en-US","pmtservice","pmtservice_invoice_total","Invoice Total: "
|
||||
"en-US","pmtservice","pmtservice_match_value","match value"
|
||||
"en-US","pmtservice","pmtservice_notserv_close","Close"
|
||||
"en-US","pmtservice","pmtservice_notserv_error","Error"
|
||||
"en-US","pmtservice","pmtservice_payment_confirmed","Payment Confirmed!!"
|
||||
"en-US","pmtservice","pmtservice_payment_notprocessed","Payment request was not processed!!"
|
||||
"en-US","pmtservice","pmtservice_payment_pending","Payment Pending!!"
|
||||
"en-US","pmtservice","pmtservice_pmtsrv_not","Payment service not"
|
||||
"en-US","pmtservice","pmtservice_reported_byxero","reported by Xero!!"
|
||||
"en-US","pmtservice","pmtservice_scan_qrcode","Scan the QR code with your wallet to make payment"
|
||||
"en-US","pmtservice","pmtservice_server_failed","server failed!!"
|
||||
"en-US","pmtservice","pmtservice_use_this","Use this "
|
||||
"en-US","pmtservice","pmtservice_wallet_link","wallet link"
|
||||
"en-US","pmtservice","pmtservice_zecdata_price","Zcash Price: "
|
||||
"en-US","pmtservice","pmtservice_zecdata_total","Total: "
|
||||
"en-US","promptinvoice","promptinvoice_func_notavail","Functionality not available for your browser. Use send button instead."
|
||||
"en-US","promptinvoice","promptinvoice_invoice_cancel","Cancel"
|
||||
"en-US","promptinvoice","promptinvoice_invoice_clipboard","Invoice's URL copied to Clipboard!!"
|
||||
"en-US","promptinvoice","promptinvoice_invoice_sent","Sent!"
|
||||
"en-US","promptinvoice","promptinvoice_invoice_url","Invoice URL:"
|
||||
"en-US","promptinvoice","promptinvoice_notserv_close","Close"
|
||||
"en-US","promptinvoice","promptinvoice_notserv_error","Error"
|
||||
"en-US","promptinvoice","promptinvoice_notserv_success","Success"
|
||||
"en-US","promptinvoice","promptinvoice_send_link","Send the invoice link to your client:"
|
||||
"en-US","promptreceipt","promptreceipt_close_lbl","Close"
|
||||
"en-US","promptreceipt","promptreceipt_func_notavail","Functionality not available for your browser. Use send button "
|
||||
"en-US","promptreceipt","promptreceipt_notserv_close","Close"
|
||||
"en-US","promptreceipt","promptreceipt_notserv_error","Error"
|
||||
"en-US","promptreceipt","promptreceipt_notserv_success","Success"
|
||||
"en-US","promptreceipt","promptreceipt_receipt_clipboard","Receipt's URL copied to Clipboard!!"
|
||||
"en-US","promptreceipt","promptreceipt_receipt_url","Receipt URL:"
|
||||
"en-US","promptreceipt","promptreceipt_send_link","Send the receipt link to your client:"
|
||||
"en-US","receipt","receipt_info_notavail","No information available."
|
||||
"en-US","receipt","receipt_invalid_id","Incorrect receipt ID."
|
||||
"en-US","receipt","receipt_order_date","Date: "
|
||||
"en-US","receipt","receipt_order_id","Order ID: "
|
||||
"en-US","receipt","receipt_order_price","Price: "
|
||||
"en-US","receipt","receipt_order_total","Total: "
|
||||
"en-US","receipt","receipt_qty_lbl","Qty."
|
||||
"en-US","receipt","receipt_receipt_lbl","Receipt"
|
||||
"en-US","receipt","receipt_zcash_price","Zcash Price: "
|
||||
"en-US","receiptqr","receiptqr_close_btn","Close"
|
||||
"en-US","receiptqr","receiptqr_scan_receipt","Scan for your Receipt"
|
||||
"en-US","scan","scan_close_btn","Close"
|
||||
"en-US","scan","scan_copy_address","Copy Address"
|
||||
"en-US","scan","scan_copy_amount","Copy Amount"
|
||||
"en-US","scan","scan_copy_error","Error while copying ammount"
|
||||
"en-US","scan","scan_copy_memo","Copy Memo"
|
||||
"en-US","scan","scan_fail_payment","Error while verifying payment"
|
||||
"en-US","scan","scan_func_notavail","Copy functionality not supported"
|
||||
"en-US","scan","scan_memo_sent","Memo Sent!"
|
||||
"en-US","scan","scan_notserv_close","Close"
|
||||
"en-US","scan","scan_notserv_error","Error"
|
||||
"en-US","scan","scan_scanqr_code","Scan the QR code"
|
||||
"en-US","scan","scan_text_info","Ensure to check the ""Include Reply-To"" box in your wallet before sending your memo."
|
||||
"en-US","scan","scan_use_this","Can't scan? Use this "
|
||||
"en-US","scan","scan_wallet_link","wallet link"
|
||||
"en-US","settings","settings_acode_invalid","Invalid Account code (10 chars max.)"
|
||||
"en-US","settings","settings_acode_lbl","Account Code:"
|
||||
"en-US","settings","settings_acode_notsaved","Account Code not saved"
|
||||
"en-US","settings","settings_acode_saved","Account Code saved!!"
|
||||
"en-US","settings","settings_close_btn","Cancel"
|
||||
"en-US","settings","settings_confirm_payments","Confirm payments?"
|
||||
"en-US","settings","settings_copy_notavail","Functionality not available for your browser. Use send button instead."
|
||||
"en-US","settings","settings_currency_lbl","Currency"
|
||||
"en-US","settings","settings_link_2xero","Link to Xero"
|
||||
"en-US","settings","settings_name_lbl","Name"
|
||||
"en-US","settings","settings_name_placeholder","Your Name"
|
||||
"en-US","settings","settings_notserv_close","Close"
|
||||
"en-US","settings","settings_notserv_error","Error"
|
||||
"en-US","settings","settings_notserv_success","Success"
|
||||
"en-US","settings","settings_notserv_warning","Warning"
|
||||
"en-US","settings","settings_ownerid_copied","Owner ID copied to clipboard"
|
||||
"en-US","settings","settings_ownerid_notcopied","Copying not available in your browser"
|
||||
"en-US","settings","settings_pmtserv_url","Payment Service URL:"
|
||||
"en-US","settings","settings_relink_2xero","Relink to Xero"
|
||||
"en-US","settings","settings_save_btn","Save"
|
||||
"en-US","settings","settings_tab_integrations","Integrations"
|
||||
"en-US","settings","settings_tab_mainlbl","Main"
|
||||
"en-US","settings","settings_URL_copied","ZGo URL copied to Clipboard!!"
|
||||
"en-US","settings","settings_use_satoshi","Use zatoshis?"
|
||||
"en-US","settings","settings_view_title","Settings"
|
||||
"en-US","settings","settings_vkey_lbl","Viewing key"
|
||||
"en-US","settings","settings_vkey_placeholder","Your wallet viewing key"
|
||||
"en-US","settings","settings_wctoken_copied","WooCommerce Token copied to clipboard"
|
||||
"en-US","settings","settings_wctoken_generated","WooCommerce Token generated!"
|
||||
"en-US","settings","settings_wctoken_genfail","WooCommerce Token generation failed"
|
||||
"en-US","settings","settings_wctoken_notcopied","Copying not available in your browser"
|
||||
"en-US","settings","settings_wc_closebtn","Close"
|
||||
"en-US","settings","settings_wc_gentoken","Generate Token"
|
||||
"en-US","settings","settings_wc_lbl","WooCommerce"
|
||||
"en-US","settings","settings_wc_ownerlbl","Owner:"
|
||||
"en-US","settings","settings_xeropmt_confirmdis","Xero Payment confirmation disabled!!"
|
||||
"en-US","settings","settings_xero_closebtn","Close"
|
||||
"en-US","settings","settings_xero_lbl","Xero"
|
||||
"en-US","settings","settings_xero_savebtn","Save Code"
|
||||
"en-US","viewer","viewer_view_orders","View Orders"
|
||||
"en-US","xero","xero_connected_2xero","Connected to Xero!"
|
||||
"en-US","xero","xero_connecting_2xero","Connecting to Xero.."
|
||||
"es-US","business","business_accept_terms","Acepto los "
|
||||
"es-US","business","business_addrs_nobiz","No tenemos un negocio asociado a esta dirección de Zcash, por favor ingrese su información abajo:"
|
||||
"es-US","business","business_biz_addressholder","Dirección"
|
||||
"es-US","business","business_biz_addresslbl","Dirección:"
|
||||
"es-US","business","business_biz_cityholder","Ciudad"
|
||||
"es-US","business","business_biz_citylbl","Ciudad:"
|
||||
"es-US","business","business_biz_countryholder","País"
|
||||
"es-US","business","business_biz_countrylbl","País:"
|
||||
"es-US","business","business_biz_info","Ingrese datos del negocio"
|
||||
"es-US","business","business_biz_mailholder","ejemplo@dominio.com"
|
||||
"es-US","business","business_biz_maillbl","E-mail:"
|
||||
"es-US","business","business_biz_nameholder","Nombre del negocio"
|
||||
"es-US","business","business_biz_namelbl","Nombre del Negocio:"
|
||||
"es-US","business","business_biz_pcodeholder","Código Postal"
|
||||
"es-US","business","business_biz_pcodelbl","Código Postal:"
|
||||
"es-US","business","business_biz_stateholder","Estado o Provincia"
|
||||
"es-US","business","business_biz_statelbl","Estado/Provincia:"
|
||||
"es-US","business","business_biz_websiteholder","Sitio web"
|
||||
"es-US","business","business_biz_websitelbl","Sitio Web:"
|
||||
"es-US","business","business_contact_fnamelbl","Nombre del Contacto:"
|
||||
"es-US","business","business_contact_fnholder","Nombre"
|
||||
"es-US","business","business_contact_lnamelbl","Apellido del Contacto:"
|
||||
"es-US","business","business_contact_lnholder","Apellido"
|
||||
"es-US","business","business_save_btn","Salvar"
|
||||
"es-US","business","business_select_session","Seleccione la duración de la sessión que necesita:"
|
||||
"es-US","business","business_session_label","Sesión:"
|
||||
"es-US","business","business_session_lengthlbl","Duración de la Sesión"
|
||||
"es-US","business","business_session_paylbl","Pagar"
|
||||
"es-US","business","business_signup_title","Registrar Negocio"
|
||||
"es-US","business","business_terms_ofuse","Términos de Uso"
|
||||
"es-US","business","business_zgo_confirmlbl","ZGo confirma su pago"
|
||||
"es-US","cancel","cancel_confirm_btn","Confirmar"
|
||||
"es-US","cancel","cancel_dismiss_btn","Descartar"
|
||||
"es-US","cancel","cancel_title","Cancelar"
|
||||
"es-US","checkout","checkout_accept_btn","Aceptar"
|
||||
"es-US","checkout","checkout_cant_scan","No puede escanear?"
|
||||
"es-US","checkout","checkout_close_btn","Cerrar"
|
||||
"es-US","checkout","checkout_copyaddress_error","Error al copiar dirección"
|
||||
"es-US","checkout","checkout_copyamount_error","Error al copiar el valor"
|
||||
"es-US","checkout","checkout_copymemo_error","Error al copiar Memo"
|
||||
"es-US","checkout","checkout_copy_address","Copiar Dirección"
|
||||
"es-US","checkout","checkout_copy_amount","Copie Valor"
|
||||
"es-US","checkout","checkout_copy_memo","Copie Valor"
|
||||
"es-US","checkout","checkout_copy_notavail","Fucionalidad de copia no soportada!!"
|
||||
"es-US","checkout","checkout_notserv_close","Cerrar"
|
||||
"es-US","checkout","checkout_notserv_error","Error"
|
||||
"es-US","checkout","checkout_scan_payment","Escanee para hacer el pago"
|
||||
"es-US","checkout","checkout_use_this","Use este "
|
||||
"es-US","checkout","checkout_wallet_link","link a billetera"
|
||||
"es-US","checkout","checkout_wallet_or",", o "
|
||||
"es-US","dbexport","dbexport_btn_close","Cancelar"
|
||||
"es-US","dbexport","dbexport_closed_no","No"
|
||||
"es-US","dbexport","dbexport_closed_yes","Si"
|
||||
"es-US","dbexport","dbexport_date_range","Rango de Fechas:"
|
||||
"es-US","dbexport","dbexport_download_link","Descargar"
|
||||
"es-US","dbexport","dbexport_end_date","Fecha final"
|
||||
"es-US","dbexport","dbexport_export_descrip","Exportar órdenes en un archivo de formato .CSV"
|
||||
"es-US","dbexport","dbexport_file_header","""Fecha"",""ID Orden"",""Moneda"",""Cerrada?"",""Valor"",""Tasa"",""ZEC"",""Pagada?"",""Factura"""
|
||||
"es-US","dbexport","dbexport_invalid_end","Fecha final inválida"
|
||||
"es-US","dbexport","dbexport_invalid_start","Fecha de inicio inválida"
|
||||
"es-US","dbexport","dbexport_noorders_created","Usted no tiene órdenes creadas."
|
||||
"es-US","dbexport","dbexport_nothing_todo","Nada que hacer."
|
||||
"es-US","dbexport","dbexport_paid_no","No"
|
||||
"es-US","dbexport","dbexport_paid_yes","Si"
|
||||
"es-US","dbexport","dbexport_settings_title","Exportar Ordenes"
|
||||
"es-US","dbexport","dbexport_start_date","Fecha inicial"
|
||||
"es-US","header","header_get_currency","Moneda:"
|
||||
"es-US","header","header_last_block","Último Bloque:"
|
||||
"es-US","invoice","invoice_cant_scan","No puede escanear?"
|
||||
"es-US","invoice","invoice_copyaddress_error","Error al copiar dirección"
|
||||
"es-US","invoice","invoice_copyamount_error","Error al copiar valor"
|
||||
"es-US","invoice","invoice_copymemo_error","Error al copiar Memo"
|
||||
"es-US","invoice","invoice_copy_address","Copie Dirección"
|
||||
"es-US","invoice","invoice_copy_amount","Copiar Valor"
|
||||
"es-US","invoice","invoice_copy_memo","Copiar Memo"
|
||||
"es-US","invoice","invoice_copy_notavail","Funcionalidad para copia no soportada"
|
||||
"es-US","invoice","invoice_dot_or",", o"
|
||||
"es-US","invoice","invoice_info_notavail","No hay información disponible."
|
||||
"es-US","invoice","invoice_invalid_id","ID de Factura incorrecto."
|
||||
"es-US","invoice","invoice_invoice_lbl","Factura"
|
||||
"es-US","invoice","invoice_invoice_total","Total Factura: "
|
||||
"es-US","invoice","invoice_notserv_close","Cerrar"
|
||||
"es-US","invoice","invoice_notserv_error","Error"
|
||||
"es-US","invoice","invoice_order_date","Fecha: "
|
||||
"es-US","invoice","invoice_order_id","ID del Pedido: "
|
||||
"es-US","invoice","invoice_order_price","Precio "
|
||||
"es-US","invoice","invoice_payment_confirmed","Pago Confirmado!!"
|
||||
"es-US","invoice","invoice_payment_pending","Pago Pendiente!!"
|
||||
"es-US","invoice","invoice_qty_lbl","Cant."
|
||||
"es-US","invoice","invoice_return_toshop","Regresar a Tienda"
|
||||
"es-US","invoice","invoice_scan_qrcode","Escanee el código QR con su billetera para hacer el pago"
|
||||
"es-US","invoice","invoice_use_this","Use este "
|
||||
"es-US","invoice","invoice_wallet_link","link de billetera"
|
||||
"es-US","invoice","invoice_zcash_price","Precio de Zcash: "
|
||||
"es-US","itemadd","itemadd_add_2order","Agregar Item a la orden"
|
||||
"es-US","itemadd","itemadd_cancel_btn","Cancelar"
|
||||
"es-US","itemadd","itemadd_save_btn","Agregar"
|
||||
"es-US","itemcreate","itemcreate_add_item","Agregar Item"
|
||||
"es-US","itemcreate","itemcreate_close_btn","Cerrar"
|
||||
"es-US","itemcreate","itemcreate_item_descr","Descripcion"
|
||||
"es-US","itemcreate","itemcreate_item_lbl","Item"
|
||||
"es-US","itemcreate","itemcreate_item_price","Precio"
|
||||
"es-US","itemcreate","itemcreate_save_btn","Grabar"
|
||||
"es-US","itemcreate","itemcreate_use_nums","Use solo números"
|
||||
"es-US","itemdel","itemdel_close_btn","Cerrar"
|
||||
"es-US","itemdel","itemdel_confirm_del","Esta seguro de querer eliminar el item "
|
||||
"es-US","itemdel","itemdel_delete_btn","Eliminar"
|
||||
"es-US","itemdel","itemdel_del_item","Eliminar Item"
|
||||
"es-US","itemedit","itemedit_close_btn","Cerrar"
|
||||
"es-US","itemedit","itemedit_edit_item","Editar Item"
|
||||
"es-US","itemedit","itemedit_item_descr","Descripcion"
|
||||
"es-US","itemedit","itemedit_item_label","Item"
|
||||
"es-US","itemedit","itemedit_item_price","Precio:"
|
||||
"es-US","itemedit","itemedit_save_btn","Guardar"
|
||||
"es-US","itemlist","itemlist_avail_items","Items Disponibles:"
|
||||
"es-US","itemlist","itemlist_list_empty","No existen items!"
|
||||
"es-US","listorders","listorders_backtoshop_btn","Regresar a Tienda"
|
||||
"es-US","listorders","listorders_export_orders","Exportar Pedidos"
|
||||
"es-US","listorders","listorders_invoice_btn","Factura"
|
||||
"es-US","listorders","listorders_item_lbl","Item"
|
||||
"es-US","listorders","listorders_no_orders","No hay órdenes"
|
||||
"es-US","listorders","listorders_order_id","ID de Orden"
|
||||
"es-US","listorders","listorders_order_total","Total de la Orden:"
|
||||
"es-US","listorders","listorders_overall_total","Total General: "
|
||||
"es-US","listorders","listorders_qty_lbl","Cant."
|
||||
"es-US","listorders","listorders_receipt_btn","Recibo"
|
||||
"es-US","listorders","listorders_todays_total","Total del Dia: "
|
||||
"es-US","listorders","listorders_total_lbl","Total"
|
||||
"es-US","login","login_check_wallet","Verifique su billetera!!"
|
||||
"es-US","login","login_confirm_login","ZGo confirma su ingreso en la cadena de Zcash"
|
||||
"es-US","login","login_confirm_pin","Confirme el PIN"
|
||||
"es-US","login","login_connect_to_zgo","Conectar su billetera a ZGo"
|
||||
"es-US","login","login_enter_pin","Ingrese el PIN enviado por ZGo para confirmar su billetera:"
|
||||
"es-US","login","login_last_block","Ultimo Bloque Verificado: "
|
||||
"es-US","login","login_link_wallet","Asociar Billetera"
|
||||
"es-US","login","login_wrong_pin","PIN Invalido!!"
|
||||
"es-US","main","main_price_data","Precios provistos por API de CoinGecko"
|
||||
"es-US","order","order_cancel_btn","Cancelar"
|
||||
"es-US","order","order_cancel_ok","Orden cancelada exitosamente!"
|
||||
"es-US","order","order_cancel_order","Cancelar Orden?"
|
||||
"es-US","order","order_checkout_btn","Procesar"
|
||||
"es-US","order","order_confirm_cancel","Esta seguro que quiere cancelar la orden?"
|
||||
"es-US","order","order_confirm_remove","Esta seguro de querer remover "
|
||||
"es-US","order","order_confirm_remove1"," de esta orden?"
|
||||
"es-US","order","order_invoice_btn","Factura"
|
||||
"es-US","order","order_item_lbl","Item"
|
||||
"es-US","order","order_notserv_close","Cerrar"
|
||||
"es-US","order","order_notserv_success","confirmado"
|
||||
"es-US","order","order_no_openorder","Sin órden abierta!!"
|
||||
"es-US","order","order_qty_lbl","Cant."
|
||||
"es-US","order","order_remove_item","Remover Item?"
|
||||
"es-US","order","order_total_lbl","Total"
|
||||
"es-US","order","order_total_title","Total Pedido:"
|
||||
"es-US","pmtservice","pmtservice_amount_doesnot","Total no"
|
||||
"es-US","pmtservice","pmtservice_cant_scan","No puede escanear?"
|
||||
"es-US","pmtservice","pmtservice_connecto_xero","Conexion con Xero"
|
||||
"es-US","pmtservice","pmtservice_copyaddress_error","Error al copiar dirección"
|
||||
"es-US","pmtservice","pmtservice_copyamount_error","Error al copiar valor"
|
||||
"es-US","pmtservice","pmtservice_copymemo_error","Error al copiar Memo"
|
||||
"es-US","pmtservice","pmtservice_copy_address","Copiar Dirección"
|
||||
"es-US","pmtservice","pmtservice_copy_amount","Copiar Valor"
|
||||
"es-US","pmtservice","pmtservice_copy_memo","Copiar Memo"
|
||||
"es-US","pmtservice","pmtservice_copy_notavail","Funcionalidad para copia no soportada"
|
||||
"es-US","pmtservice","pmtservice_currency_notsup","no soportada!!"
|
||||
"es-US","pmtservice","pmtservice_enabled_for","habilitado para"
|
||||
"es-US","pmtservice","pmtservice_hdr_txt1","Factura"
|
||||
"es-US","pmtservice","pmtservice_hdr_txt2","ID de Orden: "
|
||||
"es-US","pmtservice","pmtservice_hdr_txt3","Fecha: "
|
||||
"es-US","pmtservice","pmtservice_invalid_ownerid","ID de propietario inválida!!"
|
||||
"es-US","pmtservice","pmtservice_invoice_currency","Moneda"
|
||||
"es-US","pmtservice","pmtservice_invoice_invalid","tipo inválido!!"
|
||||
"es-US","pmtservice","pmtservice_invoice_item","Item:"
|
||||
"es-US","pmtservice","pmtservice_invoice_notfound","no encontrada!!"
|
||||
"es-US","pmtservice","pmtservice_invoice_num","Factura"
|
||||
"es-US","pmtservice","pmtservice_invoice_paid","ya pagada!!"
|
||||
"es-US","pmtservice","pmtservice_invoice_price","Precio"
|
||||
"es-US","pmtservice","pmtservice_invoice_qty","Cant."
|
||||
"es-US","pmtservice","pmtservice_invoice_total","Total Factura:"
|
||||
"es-US","pmtservice","pmtservice_match_value","es igual al valor"
|
||||
"es-US","pmtservice","pmtservice_notserv_close","Cerrar"
|
||||
"es-US","pmtservice","pmtservice_notserv_error","Error"
|
||||
"es-US","pmtservice","pmtservice_payment_confirmed","Pago Confirmado!!"
|
||||
"es-US","pmtservice","pmtservice_payment_notprocessed","Solicitud de pago no fue procesada!!"
|
||||
"es-US","pmtservice","pmtservice_payment_pending","Pago Pendiente!!"
|
||||
"es-US","pmtservice","pmtservice_pmtsrv_not","Servicio de pagos no "
|
||||
"es-US","pmtservice","pmtservice_reported_byxero","reportado por Xero!!"
|
||||
"es-US","pmtservice","pmtservice_scan_qrcode","Escanee el código QR con su billetera para hacer el pago"
|
||||
"es-US","pmtservice","pmtservice_server_failed","servidor falló!!"
|
||||
"es-US","pmtservice","pmtservice_use_this","Use este "
|
||||
"es-US","pmtservice","pmtservice_wallet_link","link de billetera"
|
||||
"es-US","pmtservice","pmtservice_zecdata_price","Precio Zcash: "
|
||||
"es-US","pmtservice","pmtservice_zecdata_total","Total: "
|
||||
"es-US","promptinvoice","promptinvoice_func_notavail","Funcionalidad no disponible en su navegador. Use el botón de enviar en lugar de eso."
|
||||
"es-US","promptinvoice","promptinvoice_invoice_cancel","Cancelar"
|
||||
"es-US","promptinvoice","promptinvoice_invoice_clipboard","URL de la factura copiado al Portapapeles!!"
|
||||
"es-US","promptinvoice","promptinvoice_invoice_sent","Enviado!"
|
||||
"es-US","promptinvoice","promptinvoice_invoice_url","URL de Factura:"
|
||||
"es-US","promptinvoice","promptinvoice_notserv_close","Cerrar"
|
||||
"es-US","promptinvoice","promptinvoice_notserv_error","Error"
|
||||
"es-US","promptinvoice","promptinvoice_notserv_success","Suceso"
|
||||
"es-US","promptinvoice","promptinvoice_send_link","Envíe el link de la factura a su cliente:"
|
||||
"es-US","promptreceipt","promptreceipt_close_lbl","Cerrar"
|
||||
"es-US","promptreceipt","promptreceipt_func_notavail","Functionality not available for your browser. Use send button "
|
||||
"es-US","promptreceipt","promptreceipt_notserv_close","Cerrar"
|
||||
"es-US","promptreceipt","promptreceipt_notserv_error","Error"
|
||||
"es-US","promptreceipt","promptreceipt_notserv_success","Suceso"
|
||||
"es-US","promptreceipt","promptreceipt_receipt_clipboard","URL del Recibo copiado a portapapeles!!"
|
||||
"es-US","promptreceipt","promptreceipt_receipt_url","URL del Recibo:"
|
||||
"es-US","promptreceipt","promptreceipt_send_link","Envíe el enlace del recibo a su cliente :"
|
||||
"es-US","receipt","receipt_info_notavail","No hay información disponible."
|
||||
"es-US","receipt","receipt_invalid_id","ID de Recibo incorrecto."
|
||||
"es-US","receipt","receipt_order_date","Fecha: "
|
||||
"es-US","receipt","receipt_order_id","ID de Orden:"
|
||||
"es-US","receipt","receipt_order_price","Precio: "
|
||||
"es-US","receipt","receipt_order_total","Total: "
|
||||
"es-US","receipt","receipt_qty_lbl","Cant."
|
||||
"es-US","receipt","receipt_receipt_lbl","Recibo "
|
||||
"es-US","receipt","receipt_zcash_price","Precio de Zcash: "
|
||||
"es-US","receiptqr","receiptqr_close_btn","Cerrar"
|
||||
"es-US","receiptqr","receiptqr_scan_receipt","Escanee para obtener su Recibo"
|
||||
"es-US","scan","scan_close_btn","Cerrar"
|
||||
"es-US","scan","scan_copy_address","Copiar Dirección"
|
||||
"es-US","scan","scan_copy_amount","Copiar Valor"
|
||||
"es-US","scan","scan_copy_error","Error al copiar valor"
|
||||
"es-US","scan","scan_copy_memo","Copiar Memo"
|
||||
"es-US","scan","scan_fail_payment","Error al verificar pago"
|
||||
"es-US","scan","scan_func_notavail","Funcionalidad de copia no soportada"
|
||||
"es-US","scan","scan_memo_sent","Memorando enviado!"
|
||||
"es-US","scan","scan_notserv_close","Cerrar"
|
||||
"es-US","scan","scan_notserv_error","Error"
|
||||
"es-US","scan","scan_scanqr_code","Escanee el código QR"
|
||||
"es-US","scan","scan_text_info","Asegúrese de marcar la caja ""Incluir Responder-A"" en su billetera antes de enviar su memo"
|
||||
"es-US","scan","scan_use_this","No puede escanear? Use este "
|
||||
"es-US","scan","scan_wallet_link","Link de billetera"
|
||||
"es-US","settings","settings_acode_invalid","Código de Cuenta inválido (10 caracteres max.)"
|
||||
"es-US","settings","settings_acode_lbl","Código de Cuenta:"
|
||||
"es-US","settings","settings_acode_notsaved","Código de cuenta no guardado!"
|
||||
"es-US","settings","settings_acode_saved","Código de cuenta guardado!!"
|
||||
"es-US","settings","settings_close_btn","Cancelar"
|
||||
"es-US","settings","settings_confirm_payments","Confirmar pagos?"
|
||||
"es-US","settings","settings_copy_notavail","Funcionalidad no disponible para su navegador. Use el botón de enviar."
|
||||
"es-US","settings","settings_currency_lbl","Moneda"
|
||||
"es-US","settings","settings_link_2xero","Enlazar a Xero"
|
||||
"es-US","settings","settings_name_lbl","Nombre"
|
||||
"es-US","settings","settings_name_placeholder","Su nombre"
|
||||
"es-US","settings","settings_notserv_close","Cerrar"
|
||||
"es-US","settings","settings_notserv_error","Error"
|
||||
"es-US","settings","settings_notserv_success","Suceso"
|
||||
"es-US","settings","settings_notserv_warning","Advertencia"
|
||||
"es-US","settings","settings_ownerid_copied","ID del propietario copiado a la papelera"
|
||||
"es-US","settings","settings_ownerid_notcopied","Copiar no disponible en su navegador"
|
||||
"es-US","settings","settings_pmtserv_url","URL del Servicio de Pago:"
|
||||
"es-US","settings","settings_relink_2xero","Reconectar a Xero"
|
||||
"es-US","settings","settings_save_btn","Salvar"
|
||||
"es-US","settings","settings_tab_integrations","Integraciones"
|
||||
"es-US","settings","settings_tab_mainlbl","Principal"
|
||||
"es-US","settings","settings_URL_copied","URL de ZGo copiado a la papelera!!"
|
||||
"es-US","settings","settings_use_satoshi","Usar zatoshis?"
|
||||
"es-US","settings","settings_view_title","Configuración"
|
||||
"es-US","settings","settings_vkey_lbl","Clave de visualización"
|
||||
"es-US","settings","settings_vkey_placeholder","Clave de visualización de su billetera"
|
||||
"es-US","settings","settings_wctoken_copied","Token de WooCommerce copiado a la papelera"
|
||||
"es-US","settings","settings_wctoken_generated","Token de WooCommerce generado!"
|
||||
"es-US","settings","settings_wctoken_genfail","Falla generación de Token de WooCommerce"
|
||||
"es-US","settings","settings_wctoken_notcopied","Copiar no disponible en su navegador"
|
||||
"es-US","settings","settings_wc_closebtn","Cerrar"
|
||||
"es-US","settings","settings_wc_gentoken","Generar Token"
|
||||
"es-US","settings","settings_wc_lbl","WooCommerce"
|
||||
"es-US","settings","settings_wc_ownerlbl","Propietario:"
|
||||
"es-US","settings","settings_xeropmt_confirmdis","Confirmación de pagos de Xero desactivada!!"
|
||||
"es-US","settings","settings_xero_closebtn","Cerrar"
|
||||
"es-US","settings","settings_xero_lbl","Xero"
|
||||
"es-US","settings","settings_xero_savebtn","Guardar Código"
|
||||
"es-US","viewer","viewer_view_orders","Ver Ordenes"
|
||||
"es-US","xero","xero_connected_2xero","Conectado a Xero!"
|
||||
"es-US","xero","xero_connecting_2xero","Conectando a Xero.."
|
|
886
languages_0.sql
Normal file
886
languages_0.sql
Normal file
|
@ -0,0 +1,886 @@
|
|||
-- phpMyAdmin SQL Dump
|
||||
-- version 5.2.1-1.fc37.remi
|
||||
-- https://www.phpmyadmin.net/
|
||||
--
|
||||
-- Host: localhost
|
||||
-- Generation Time: Feb 23, 2023 at 02:58 PM
|
||||
-- Server version: 10.7.7-MariaDB
|
||||
-- PHP Version: 8.1.16
|
||||
|
||||
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
|
||||
START TRANSACTION;
|
||||
SET time_zone = "+00:00";
|
||||
|
||||
|
||||
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
||||
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
||||
/*!40101 SET NAMES utf8mb4 */;
|
||||
|
||||
--
|
||||
-- Database: `zgoi18n`
|
||||
--
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `languages`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `languages`;
|
||||
CREATE TABLE `languages` (
|
||||
`encode_id` varchar(10) NOT NULL DEFAULT '' COMMENT 'Language encoding id',
|
||||
`view_name` varchar(32) NOT NULL DEFAULT '' COMMENT 'View name that use this language',
|
||||
`view_element` varchar(32) NOT NULL DEFAULT '' COMMENT 'Element name',
|
||||
`view_element_text` varchar(4000) NOT NULL DEFAULT '' COMMENT 'Text to be displayed'
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='ZGo Language translation database';
|
||||
|
||||
--
|
||||
-- Dumping data for table `languages`
|
||||
--
|
||||
|
||||
INSERT INTO `languages` (`encode_id`, `view_name`, `view_element`, `view_element_text`) VALUES
|
||||
('br-US', 'business', 'business_accept_terms', 'Eu aceito os '),
|
||||
('br-US', 'business', 'business_addrs_nobiz', 'Não temos um negócio associado a este endereço Zcash, por favor insira suas informações abaixo:'),
|
||||
('br-US', 'business', 'business_biz_addressholder', 'Endereço'),
|
||||
('br-US', 'business', 'business_biz_addresslbl', 'Endereço:'),
|
||||
('br-US', 'business', 'business_biz_cityholder', 'Cidade'),
|
||||
('br-US', 'business', 'business_biz_citylbl', 'Cidade:'),
|
||||
('br-US', 'business', 'business_biz_countryholder', 'País'),
|
||||
('br-US', 'business', 'business_biz_countrylbl', 'País:'),
|
||||
('br-US', 'business', 'business_biz_info', 'Insira os dados da empresa'),
|
||||
('br-US', 'business', 'business_biz_mailholder', 'exemplo@dominio.com'),
|
||||
('br-US', 'business', 'business_biz_maillbl', 'E-mail'),
|
||||
('br-US', 'business', 'business_biz_nameholder', 'Nome da empresa'),
|
||||
('br-US', 'business', 'business_biz_namelbl', 'Nome da empresa:'),
|
||||
('br-US', 'business', 'business_biz_pcodeholder', 'Código Postal'),
|
||||
('br-US', 'business', 'business_biz_pcodelbl', 'Código postal:'),
|
||||
('br-US', 'business', 'business_biz_stateholder', 'Estado/Provincia'),
|
||||
('br-US', 'business', 'business_biz_statelbl', 'Estado/Provincia'),
|
||||
('br-US', 'business', 'business_biz_websiteholder', 'Website'),
|
||||
('br-US', 'business', 'business_biz_websitelbl', 'Website'),
|
||||
('br-US', 'business', 'business_contact_fnamelbl', 'Primeiro nome do contato:'),
|
||||
('br-US', 'business', 'business_contact_fnholder', 'Nome'),
|
||||
('br-US', 'business', 'business_contact_lnamelbl', 'Último sobrenome do contato:'),
|
||||
('br-US', 'business', 'business_contact_lnholder', 'Sobrenome '),
|
||||
('br-US', 'business', 'business_save_btn', 'Salvar'),
|
||||
('br-US', 'business', 'business_select_session', 'Selecione a duração da sessão que você necessita:'),
|
||||
('br-US', 'business', 'business_session_label', 'Sessão:'),
|
||||
('br-US', 'business', 'business_session_lengthlbl', 'Duração da sessão'),
|
||||
('br-US', 'business', 'business_session_paylbl', 'Pagar'),
|
||||
('br-US', 'business', 'business_signup_title', 'Inscrição de negócio'),
|
||||
('br-US', 'business', 'business_terms_ofuse', 'Termos de Uso'),
|
||||
('br-US', 'business', 'business_zgo_confirmlbl', 'ZGo confirma o seu pagamento'),
|
||||
('br-US', 'cancel', 'cancel_confirm_btn', 'Confirmar'),
|
||||
('br-US', 'cancel', 'cancel_dismiss_btn', 'Descartar'),
|
||||
('br-US', 'cancel', 'cancel_title', 'Cancelar'),
|
||||
('br-US', 'checkout', 'checkout_accept_btn', 'Aceitar'),
|
||||
('br-US', 'checkout', 'checkout_cant_scan', 'Não consegue escanear?'),
|
||||
('br-US', 'checkout', 'checkout_close_btn', 'Fechar'),
|
||||
('br-US', 'checkout', 'checkout_copyaddress_error', 'Erro ao copiar endereço'),
|
||||
('br-US', 'checkout', 'checkout_copyamount_error', 'Erro ao copiar o valor'),
|
||||
('br-US', 'checkout', 'checkout_copymemo_error', 'Erro ao copiar o memorando'),
|
||||
('br-US', 'checkout', 'checkout_copy_address', 'Copiar Endereço'),
|
||||
('br-US', 'checkout', 'checkout_copy_amount', 'Copiar Valor'),
|
||||
('br-US', 'checkout', 'checkout_copy_memo', 'Copiar Memo'),
|
||||
('br-US', 'checkout', 'checkout_copy_notavail', 'Funcionalidade de cópia não suportada!!'),
|
||||
('br-US', 'checkout', 'checkout_notserv_close', 'Fechar'),
|
||||
('br-US', 'checkout', 'checkout_notserv_error', 'Erro'),
|
||||
('br-US', 'checkout', 'checkout_scan_payment', 'Escaneie para fazer o pagamento'),
|
||||
('br-US', 'checkout', 'checkout_use_this', 'Use este/isso'),
|
||||
('br-US', 'checkout', 'checkout_wallet_link', 'link de carteira'),
|
||||
('br-US', 'checkout', 'checkout_wallet_or', ', ou '),
|
||||
('br-US', 'dbexport', 'dbexport_btn_close', 'Cancelar'),
|
||||
('br-US', 'dbexport', 'dbexport_closed_no', 'Não'),
|
||||
('br-US', 'dbexport', 'dbexport_closed_yes', 'Sim'),
|
||||
('br-US', 'dbexport', 'dbexport_date_range', 'Intervalo de datas:'),
|
||||
('br-US', 'dbexport', 'dbexport_download_link', 'Download'),
|
||||
('br-US', 'dbexport', 'dbexport_end_date', 'Data de término'),
|
||||
('br-US', 'dbexport', 'dbexport_export_descrip', 'Exportar pedidos em um arquivo de formato .CSV'),
|
||||
('br-US', 'dbexport', 'dbexport_file_header', '\"Data\",\"ID do pedido\",\"Moeda\",\"Fechado?\",\"Valor\",\"Taxa\",\"ZEC\",\"Pago?\",\"Fatura\"'),
|
||||
('br-US', 'dbexport', 'dbexport_invalid_end', 'Data final inválida'),
|
||||
('br-US', 'dbexport', 'dbexport_invalid_start', 'Data de início inválida'),
|
||||
('br-US', 'dbexport', 'dbexport_noorders_created', 'Você não tem pedidos criados.'),
|
||||
('br-US', 'dbexport', 'dbexport_nothing_todo', 'Nada para fazer.'),
|
||||
('br-US', 'dbexport', 'dbexport_paid_no', 'Não'),
|
||||
('br-US', 'dbexport', 'dbexport_paid_yes', 'Sim'),
|
||||
('br-US', 'dbexport', 'dbexport_settings_title', 'Exportar pedidos'),
|
||||
('br-US', 'dbexport', 'dbexport_start_date', 'Data de início'),
|
||||
('br-US', 'header', 'header_get_currency', 'Moeda:'),
|
||||
('br-US', 'header', 'header_last_block', 'Último Bloco:'),
|
||||
('br-US', 'invoice', 'invoice_cant_scan', 'Não consegue escanear?'),
|
||||
('br-US', 'invoice', 'invoice_copyaddress_error', 'Erro ao copiar endereço'),
|
||||
('br-US', 'invoice', 'invoice_copyamount_error', 'Erro ao copiar o valor'),
|
||||
('br-US', 'invoice', 'invoice_copymemo_error', 'Erro ao copiar o memorando'),
|
||||
('br-US', 'invoice', 'invoice_copy_address', 'Copiar Endereço'),
|
||||
('br-US', 'invoice', 'invoice_copy_amount', 'Copiar Valor'),
|
||||
('br-US', 'invoice', 'invoice_copy_memo', 'Copiar Memo'),
|
||||
('br-US', 'invoice', 'invoice_copy_notavail', 'Funcionalidade de cópia não suportada'),
|
||||
('br-US', 'invoice', 'invoice_dot_or', ', ou'),
|
||||
('br-US', 'invoice', 'invoice_info_notavail', 'Não há informação disponível.'),
|
||||
('br-US', 'invoice', 'invoice_invalid_id', 'ID do fatura incorreto.'),
|
||||
('br-US', 'invoice', 'invoice_invoice_lbl', 'Fatura'),
|
||||
('br-US', 'invoice', 'invoice_invoice_total', 'Total da Fatura:'),
|
||||
('br-US', 'invoice', 'invoice_notserv_close', 'Fechar'),
|
||||
('br-US', 'invoice', 'invoice_notserv_error', 'Erro'),
|
||||
('br-US', 'invoice', 'invoice_order_date', 'Data: '),
|
||||
('br-US', 'invoice', 'invoice_order_id', 'ID do Pedido: '),
|
||||
('br-US', 'invoice', 'invoice_order_price', 'Preço '),
|
||||
('br-US', 'invoice', 'invoice_payment_confirmed', 'Pagamento Confirmado!!'),
|
||||
('br-US', 'invoice', 'invoice_payment_pending', 'Pagamento Pendente!!'),
|
||||
('br-US', 'invoice', 'invoice_qty_lbl', 'Qtde.'),
|
||||
('br-US', 'invoice', 'invoice_return_toshop', 'Voltar à Loja'),
|
||||
('br-US', 'invoice', 'invoice_scan_qrcode', 'Escaneie o QR Code com sua carteira para efetuar o pagamento'),
|
||||
('br-US', 'invoice', 'invoice_use_this', 'Use isso '),
|
||||
('br-US', 'invoice', 'invoice_wallet_link', 'Link da Carteira'),
|
||||
('br-US', 'invoice', 'invoice_zcash_price', 'Preço da Zcash: '),
|
||||
('br-US', 'itemadd', 'itemadd_add_2order', 'Adicionar Item ao Pedido'),
|
||||
('br-US', 'itemadd', 'itemadd_cancel_btn', 'Cancelar'),
|
||||
('br-US', 'itemadd', 'itemadd_save_btn', 'Adicionar'),
|
||||
('br-US', 'itemcreate', 'itemcreate_add_item', 'Adicionar Item'),
|
||||
('br-US', 'itemcreate', 'itemcreate_close_btn', 'Fechar'),
|
||||
('br-US', 'itemcreate', 'itemcreate_item_descr', 'Descrição'),
|
||||
('br-US', 'itemcreate', 'itemcreate_item_lbl', 'Item'),
|
||||
('br-US', 'itemcreate', 'itemcreate_item_price', 'Preço'),
|
||||
('br-US', 'itemcreate', 'itemcreate_save_btn', 'Salvar'),
|
||||
('br-US', 'itemcreate', 'itemcreate_use_nums', 'Use apenas números'),
|
||||
('br-US', 'itemdel', 'itemdel_close_btn', 'Fechar'),
|
||||
('br-US', 'itemdel', 'itemdel_confirm_del', 'Tem certeza de que deseja apagar '),
|
||||
('br-US', 'itemdel', 'itemdel_delete_btn', 'Excluir'),
|
||||
('br-US', 'itemdel', 'itemdel_del_item', 'Excluir Item'),
|
||||
('br-US', 'itemedit', 'itemedit_close_btn', 'Fechar'),
|
||||
('br-US', 'itemedit', 'itemedit_edit_item', 'Editar Item'),
|
||||
('br-US', 'itemedit', 'itemedit_item_descr', 'Descrição '),
|
||||
('br-US', 'itemedit', 'itemedit_item_label', 'Item'),
|
||||
('br-US', 'itemedit', 'itemedit_item_price', 'Preço:'),
|
||||
('br-US', 'itemedit', 'itemedit_save_btn', 'Salvar'),
|
||||
('br-US', 'itemlist', 'itemlist_avail_items', 'Items disponíveis:'),
|
||||
('br-US', 'itemlist', 'itemlist_list_empty', 'Ainda não há itens'),
|
||||
('br-US', 'listorders', 'listorders_backtoshop_btn', 'Voltar a Loja'),
|
||||
('br-US', 'listorders', 'listorders_export_orders', 'Exportar Pedidos'),
|
||||
('br-US', 'listorders', 'listorders_invoice_btn', 'Fatura'),
|
||||
('br-US', 'listorders', 'listorders_item_lbl', 'Item'),
|
||||
('br-US', 'listorders', 'listorders_no_orders', 'Não há Pedidos'),
|
||||
('br-US', 'listorders', 'listorders_order_id', 'ID do Pedido'),
|
||||
('br-US', 'listorders', 'listorders_order_total', 'Total do Pedido:'),
|
||||
('br-US', 'listorders', 'listorders_overall_total', 'Total geral: '),
|
||||
('br-US', 'listorders', 'listorders_qty_lbl', 'Qtde.'),
|
||||
('br-US', 'listorders', 'listorders_receipt_btn', 'Comprovante'),
|
||||
('br-US', 'listorders', 'listorders_todays_total', 'Total de hoje: '),
|
||||
('br-US', 'listorders', 'listorders_total_lbl', 'Total'),
|
||||
('br-US', 'login', 'login_check_wallet', 'Verifique sua carteira!!'),
|
||||
('br-US', 'login', 'login_confirm_login', 'ZGo confirma seu login na blockchain da Zcash'),
|
||||
('br-US', 'login', 'login_confirm_pin', 'Confirmar Senha'),
|
||||
('br-US', 'login', 'login_connect_to_zgo', 'Conecte sua carteira ao ZGo'),
|
||||
('br-US', 'login', 'login_enter_pin', 'Insira a senha enviada pela ZGo para confirmar a propriedade da carteira:'),
|
||||
('br-US', 'login', 'login_last_block', 'Último bloco visto:'),
|
||||
('br-US', 'login', 'login_link_wallet', 'Conecte sua carteira'),
|
||||
('br-US', 'login', 'login_wrong_pin', 'Senha incorreta!'),
|
||||
('br-US', 'main', 'main_price_data', 'Preços informados pela CoinGecko API'),
|
||||
('br-US', 'order', 'order_cancel_btn', 'Cancelar'),
|
||||
('br-US', 'order', 'order_cancel_ok', 'Pedido cancelado com sucesso!'),
|
||||
('br-US', 'order', 'order_cancel_order', 'Cancelar o pedido?'),
|
||||
('br-US', 'order', 'order_checkout_btn', 'Procesar'),
|
||||
('br-US', 'order', 'order_confirm_cancel', 'Tem certeza que deseja cancelar o pedido?'),
|
||||
('br-US', 'order', 'order_confirm_remove', 'Tem certeza que deseja remover <<'),
|
||||
('br-US', 'order', 'order_confirm_remove1', ' deste pedido?'),
|
||||
('br-US', 'order', 'order_invoice_btn', 'Fatura'),
|
||||
('br-US', 'order', 'order_item_lbl', 'Item'),
|
||||
('br-US', 'order', 'order_notserv_close', 'Fechar'),
|
||||
('br-US', 'order', 'order_notserv_success', 'succeso'),
|
||||
('br-US', 'order', 'order_no_openorder', 'Sem pedido aberto!!'),
|
||||
('br-US', 'order', 'order_qty_lbl', 'Qtde.'),
|
||||
('br-US', 'order', 'order_remove_item', 'Remover o Item?'),
|
||||
('br-US', 'order', 'order_total_lbl', 'Total'),
|
||||
('br-US', 'order', 'order_total_title', 'Total do Pedido:'),
|
||||
('br-US', 'pmtservice', 'pmtservice_amount_doesnot', 'O Valor não'),
|
||||
('br-US', 'pmtservice', 'pmtservice_cant_scan', 'Não consegue escanear?'),
|
||||
('br-US', 'pmtservice', 'pmtservice_connecto_xero', 'Conexão para o Xero'),
|
||||
('br-US', 'pmtservice', 'pmtservice_copyaddress_error', 'Erro ao copiar endereço'),
|
||||
('br-US', 'pmtservice', 'pmtservice_copyamount_error', 'Erro ao copiar o valor'),
|
||||
('br-US', 'pmtservice', 'pmtservice_copymemo_error', 'Erro ao copiar o memorando'),
|
||||
('br-US', 'pmtservice', 'pmtservice_copy_address', 'Copiar Endereço'),
|
||||
('br-US', 'pmtservice', 'pmtservice_copy_amount', 'Copiar Valor'),
|
||||
('br-US', 'pmtservice', 'pmtservice_copy_memo', 'Copiar Memo'),
|
||||
('br-US', 'pmtservice', 'pmtservice_copy_notavail', 'Funcionalidade de cópia não suportada'),
|
||||
('br-US', 'pmtservice', 'pmtservice_currency_notsup', 'não suportada!!'),
|
||||
('br-US', 'pmtservice', 'pmtservice_enabled_for', 'habilitado para'),
|
||||
('br-US', 'pmtservice', 'pmtservice_hdr_txt1', 'Fatura'),
|
||||
('br-US', 'pmtservice', 'pmtservice_hdr_txt2', 'ID do Pedido: '),
|
||||
('br-US', 'pmtservice', 'pmtservice_hdr_txt3', 'Data: '),
|
||||
('br-US', 'pmtservice', 'pmtservice_invalid_ownerid', 'ID do proprietário inválido!!'),
|
||||
('br-US', 'pmtservice', 'pmtservice_invoice_currency', 'Moeda'),
|
||||
('br-US', 'pmtservice', 'pmtservice_invoice_invalid', 'tipo inválido!!'),
|
||||
('br-US', 'pmtservice', 'pmtservice_invoice_item', 'Item:'),
|
||||
('br-US', 'pmtservice', 'pmtservice_invoice_notfound', 'não encontrada!!'),
|
||||
('br-US', 'pmtservice', 'pmtservice_invoice_num', 'Fatura'),
|
||||
('br-US', 'pmtservice', 'pmtservice_invoice_paid', 'já pago!!'),
|
||||
('br-US', 'pmtservice', 'pmtservice_invoice_price', 'Preço'),
|
||||
('br-US', 'pmtservice', 'pmtservice_invoice_qty', 'Qtde.'),
|
||||
('br-US', 'pmtservice', 'pmtservice_invoice_total', 'Total da Fatura:'),
|
||||
('br-US', 'pmtservice', 'pmtservice_match_value', 'corresponde ao valor'),
|
||||
('br-US', 'pmtservice', 'pmtservice_notserv_close', 'Fechar'),
|
||||
('br-US', 'pmtservice', 'pmtservice_notserv_error', 'Erro'),
|
||||
('br-US', 'pmtservice', 'pmtservice_payment_confirmed', 'Pagamento Confirmado!!'),
|
||||
('br-US', 'pmtservice', 'pmtservice_payment_notprocessed', 'Pedido de pagamento não foi processado!!'),
|
||||
('br-US', 'pmtservice', 'pmtservice_payment_pending', 'Pagamento Pendente!!'),
|
||||
('br-US', 'pmtservice', 'pmtservice_pmtsrv_not', 'Serviço de pagamento não'),
|
||||
('br-US', 'pmtservice', 'pmtservice_reported_byxero', 'reportado por Xero!!'),
|
||||
('br-US', 'pmtservice', 'pmtservice_scan_qrcode', 'Escaneie o QR Code com sua carteira para efetuar o pagamento'),
|
||||
('br-US', 'pmtservice', 'pmtservice_server_failed', 'servidor falhou!!'),
|
||||
('br-US', 'pmtservice', 'pmtservice_use_this', 'Use isso'),
|
||||
('br-US', 'pmtservice', 'pmtservice_wallet_link', 'Link da Carteira'),
|
||||
('br-US', 'pmtservice', 'pmtservice_zecdata_price', 'Preço da Zcash:'),
|
||||
('br-US', 'pmtservice', 'pmtservice_zecdata_total', 'Total: '),
|
||||
('br-US', 'promptinvoice', 'promptinvoice_func_notavail', 'Funcionalidade não disponível para o seu navegador. Use o botão enviar ao invés disso'),
|
||||
('br-US', 'promptinvoice', 'promptinvoice_invoice_cancel', 'Cancelar'),
|
||||
('br-US', 'promptinvoice', 'promptinvoice_invoice_clipboard', 'URL da fatura copiado para a área de transferência!!'),
|
||||
('br-US', 'promptinvoice', 'promptinvoice_invoice_sent', 'Enviado!'),
|
||||
('br-US', 'promptinvoice', 'promptinvoice_invoice_url', 'URL da Fatura:'),
|
||||
('br-US', 'promptinvoice', 'promptinvoice_notserv_close', 'Fechar'),
|
||||
('br-US', 'promptinvoice', 'promptinvoice_notserv_error', 'Erro'),
|
||||
('br-US', 'promptinvoice', 'promptinvoice_notserv_success', 'Suceso'),
|
||||
('br-US', 'promptinvoice', 'promptinvoice_send_link', 'Envie o link da fatura para o seu cliente:'),
|
||||
('br-US', 'promptreceipt', 'promptreceipt_close_lbl', 'Fechar'),
|
||||
('br-US', 'promptreceipt', 'promptreceipt_func_notavail', 'Funcionalidade não disponível para o seu navegador. Use o botão Enviar'),
|
||||
('br-US', 'promptreceipt', 'promptreceipt_notserv_close', 'Fechar'),
|
||||
('br-US', 'promptreceipt', 'promptreceipt_notserv_error', 'Erro'),
|
||||
('br-US', 'promptreceipt', 'promptreceipt_notserv_success', 'Sucesso'),
|
||||
('br-US', 'promptreceipt', 'promptreceipt_receipt_clipboard', 'URL do comprovante foi copiado para a área de transferência!!'),
|
||||
('br-US', 'promptreceipt', 'promptreceipt_receipt_url', 'URL do comprovante:'),
|
||||
('br-US', 'promptreceipt', 'promptreceipt_send_link', 'Envie o link do comprovante para o seu cliente:'),
|
||||
('br-US', 'receipt', 'receipt_info_notavail', 'Não há informação disponível.'),
|
||||
('br-US', 'receipt', 'receipt_invalid_id', 'ID do comprovante incorreto.'),
|
||||
('br-US', 'receipt', 'receipt_order_date', 'Data:'),
|
||||
('br-US', 'receipt', 'receipt_order_id', 'ID do Pedido:'),
|
||||
('br-US', 'receipt', 'receipt_order_price', 'Preço:'),
|
||||
('br-US', 'receipt', 'receipt_order_total', 'Total:'),
|
||||
('br-US', 'receipt', 'receipt_qty_lbl', 'Qtde.'),
|
||||
('br-US', 'receipt', 'receipt_receipt_lbl', 'Comprovante'),
|
||||
('br-US', 'receipt', 'receipt_zcash_price', 'Preço da Zcash:'),
|
||||
('br-US', 'receiptqr', 'receiptqr_close_btn', 'Fechar'),
|
||||
('br-US', 'receiptqr', 'receiptqr_scan_receipt', 'Escaneie para o seu comprovante'),
|
||||
('br-US', 'scan', 'scan_close_btn', 'Fechar'),
|
||||
('br-US', 'scan', 'scan_copy_address', 'Copiar Endereço'),
|
||||
('br-US', 'scan', 'scan_copy_amount', 'Copiar Valor'),
|
||||
('br-US', 'scan', 'scan_copy_error', 'Falha ao copiar o valor'),
|
||||
('br-US', 'scan', 'scan_copy_memo', 'Copiar Memo'),
|
||||
('br-US', 'scan', 'scan_fail_payment', 'Erro ao verificar o pagamento'),
|
||||
('br-US', 'scan', 'scan_func_notavail', 'Funcionalidade de cópia não suportada'),
|
||||
('br-US', 'scan', 'scan_memo_sent', 'Memorando enviado!'),
|
||||
('br-US', 'scan', 'scan_notserv_close', 'Fechar'),
|
||||
('br-US', 'scan', 'scan_notserv_error', 'Erro'),
|
||||
('br-US', 'scan', 'scan_scanqr_code', 'Scanei o QR Code'),
|
||||
('br-US', 'scan', 'scan_text_info', 'Certifique-se de selecionar \"Incluir Responder-A\" na sua carteira antes de enviar o seu memorando.'),
|
||||
('br-US', 'scan', 'scan_use_this', 'Não consegue escanear ? Use isso'),
|
||||
('br-US', 'scan', 'scan_wallet_link', 'Link de carteira'),
|
||||
('br-US', 'settings', 'settings_acode_invalid', 'Número da Conta inválido (10 caracteres no máximo)'),
|
||||
('br-US', 'settings', 'settings_acode_lbl', 'Número da conta:'),
|
||||
('br-US', 'settings', 'settings_acode_notsaved', 'Número da Conta não salvo!!'),
|
||||
('br-US', 'settings', 'settings_acode_saved', 'Número da conta Salvo!!'),
|
||||
('br-US', 'settings', 'settings_close_btn', 'Cancelar'),
|
||||
('br-US', 'settings', 'settings_confirm_payments', 'Confirmar pagamentos?'),
|
||||
('br-US', 'settings', 'settings_copy_notavail', 'Funcionalidade não disponível para o seu navegador. Use o botão enviar ao invés disso'),
|
||||
('br-US', 'settings', 'settings_currency_lbl', 'Moeda'),
|
||||
('br-US', 'settings', 'settings_link_2xero', 'Conectar-se ao Xero'),
|
||||
('br-US', 'settings', 'settings_name_lbl', 'Nome'),
|
||||
('br-US', 'settings', 'settings_name_placeholder', 'Seu nome'),
|
||||
('br-US', 'settings', 'settings_notserv_close', 'Fechar'),
|
||||
('br-US', 'settings', 'settings_notserv_error', 'Erro'),
|
||||
('br-US', 'settings', 'settings_notserv_success', 'Sucesso'),
|
||||
('br-US', 'settings', 'settings_notserv_warning', 'Aviso'),
|
||||
('br-US', 'settings', 'settings_ownerid_copied', 'ID do proprietário copiado para a prancheta'),
|
||||
('br-US', 'settings', 'settings_ownerid_notcopied', 'Cópia não disponível em seu navegador'),
|
||||
('br-US', 'settings', 'settings_pmtserv_url', 'URL de Serviço de Pagamento:'),
|
||||
('br-US', 'settings', 'settings_relink_2xero', 'Reconectar-se ao Xero '),
|
||||
('br-US', 'settings', 'settings_save_btn', 'Salvar'),
|
||||
('br-US', 'settings', 'settings_tab_integrations', 'Integrações'),
|
||||
('br-US', 'settings', 'settings_tab_mainlbl', 'Principal'),
|
||||
('br-US', 'settings', 'settings_url_copied', 'URL ZGo copiado para a prancheta!!'),
|
||||
('br-US', 'settings', 'settings_use_satoshi', 'Usar zatoshis?'),
|
||||
('br-US', 'settings', 'settings_view_title', 'Definições'),
|
||||
('br-US', 'settings', 'settings_vkey_lbl', 'Chave de visualização'),
|
||||
('br-US', 'settings', 'settings_vkey_placeholder', 'Sua chave de visualização da carteira'),
|
||||
('br-US', 'settings', 'settings_wctoken_copied', 'Token WooCommerce copiado para a prancheta'),
|
||||
('br-US', 'settings', 'settings_wctoken_generated', 'Token da WoCommerce gerado'),
|
||||
('br-US', 'settings', 'settings_wctoken_genfail', 'Geração do token da WooCommerce falhou'),
|
||||
('br-US', 'settings', 'settings_wctoken_notcopied', 'Cópia não disponível no seu navegador'),
|
||||
('br-US', 'settings', 'settings_wc_closebtn', 'Fechar'),
|
||||
('br-US', 'settings', 'settings_wc_gentoken', 'Gerar Token'),
|
||||
('br-US', 'settings', 'settings_wc_lbl', 'WooCommerce'),
|
||||
('br-US', 'settings', 'settings_wc_ownerlbl', 'Proprietário:'),
|
||||
('br-US', 'settings', 'settings_xeropmt_confirmdis', 'Confirmação de pagamentos Xero desativada!! '),
|
||||
('br-US', 'settings', 'settings_xero_closebtn', 'Fechar'),
|
||||
('br-US', 'settings', 'settings_xero_lbl', 'Xero'),
|
||||
('br-US', 'settings', 'settings_xero_savebtn', 'Salvar código'),
|
||||
('br-US', 'viewer', 'viewer_view_orders', 'Ver Pedidos'),
|
||||
('br-US', 'xero', 'xero_connected_2xero', 'Conectado ao Xero!'),
|
||||
('br-US', 'xero', 'xero_connecting_2xero', 'Conectando ao Xero..'),
|
||||
('en-US', 'business', 'business_accept_terms', 'I accept the '),
|
||||
('en-US', 'business', 'business_addrs_nobiz', 'We do not have a business associated with this Zcash address, please enter your information below:'),
|
||||
('en-US', 'business', 'business_biz_addressholder', 'Address'),
|
||||
('en-US', 'business', 'business_biz_addresslbl', 'Address:'),
|
||||
('en-US', 'business', 'business_biz_cityholder', 'City'),
|
||||
('en-US', 'business', 'business_biz_citylbl', 'City:'),
|
||||
('en-US', 'business', 'business_biz_countryholder', 'Country'),
|
||||
('en-US', 'business', 'business_biz_countrylbl', 'Country:'),
|
||||
('en-US', 'business', 'business_biz_info', 'Provide business info'),
|
||||
('en-US', 'business', 'business_biz_mailholder', 'example@domain.com'),
|
||||
('en-US', 'business', 'business_biz_maillbl', 'E-mail:'),
|
||||
('en-US', 'business', 'business_biz_nameholder', 'Business name'),
|
||||
('en-US', 'business', 'business_biz_namelbl', 'Business Name:'),
|
||||
('en-US', 'business', 'business_biz_pcodeholder', 'Postal code'),
|
||||
('en-US', 'business', 'business_biz_pcodelbl', 'Postal Code:'),
|
||||
('en-US', 'business', 'business_biz_stateholder', 'State or Province'),
|
||||
('en-US', 'business', 'business_biz_statelbl', 'State/Province:'),
|
||||
('en-US', 'business', 'business_biz_websiteholder', 'website'),
|
||||
('en-US', 'business', 'business_biz_websitelbl', 'Website:'),
|
||||
('en-US', 'business', 'business_contact_fnamelbl', 'Contact First name:'),
|
||||
('en-US', 'business', 'business_contact_fnholder', 'First name'),
|
||||
('en-US', 'business', 'business_contact_lnamelbl', 'Contact Last Name:'),
|
||||
('en-US', 'business', 'business_contact_lnholder', 'Last Name'),
|
||||
('en-US', 'business', 'business_save_btn', 'Save'),
|
||||
('en-US', 'business', 'business_select_session ', 'Please select the length of session that you need:'),
|
||||
('en-US', 'business', 'business_session_label', 'Session:'),
|
||||
('en-US', 'business', 'business_session_lengthlbl', 'Session Length'),
|
||||
('en-US', 'business', 'business_session_paylbl', 'Pay'),
|
||||
('en-US', 'business', 'business_signup_title', 'Business sign-up'),
|
||||
('en-US', 'business', 'business_terms_ofuse', 'Terms of Use'),
|
||||
('en-US', 'business', 'business_zgo_confirmlbl', 'ZGo confirms your payment'),
|
||||
('en-US', 'cancel', 'cancel_confirm_btn', 'Confirm'),
|
||||
('en-US', 'cancel', 'cancel_dismiss_btn', 'Dismiss'),
|
||||
('en-US', 'cancel', 'cancel_title', 'Cancel'),
|
||||
('en-US', 'checkout', 'checkout_accept_btn', 'Accept'),
|
||||
('en-US', 'checkout', 'checkout_cant_scan', 'Can\'t scan?'),
|
||||
('en-US', 'checkout', 'checkout_close_btn', 'Close'),
|
||||
('en-US', 'checkout', 'checkout_copyaddress_error', 'Error copying address'),
|
||||
('en-US', 'checkout', 'checkout_copyamount_error', 'Error while copying ammount'),
|
||||
('en-US', 'checkout', 'checkout_copymemo_error', 'Error while copying Memo'),
|
||||
('en-US', 'checkout', 'checkout_copy_address', 'Copy Address'),
|
||||
('en-US', 'checkout', 'checkout_copy_amount', 'Copy Amount'),
|
||||
('en-US', 'checkout', 'checkout_copy_memo', 'Copy Memo'),
|
||||
('en-US', 'checkout', 'checkout_copy_notavail', 'Copy functionality not supported!!'),
|
||||
('en-US', 'checkout', 'checkout_notserv_close', 'Close'),
|
||||
('en-US', 'checkout', 'checkout_notserv_error', 'Error'),
|
||||
('en-US', 'checkout', 'checkout_scan_payment', 'Scan to make payment'),
|
||||
('en-US', 'checkout', 'checkout_use_this', 'Use this '),
|
||||
('en-US', 'checkout', 'checkout_wallet_link', 'wallet link'),
|
||||
('en-US', 'checkout', 'checkout_wallet_or', ', or '),
|
||||
('en-US', 'dbexport', 'dbexport_btn_close', 'Cancel'),
|
||||
('en-US', 'dbexport', 'dbexport_closed_no', 'No'),
|
||||
('en-US', 'dbexport', 'dbexport_closed_yes', 'Yes'),
|
||||
('en-US', 'dbexport', 'dbexport_date_range', 'Date Range:'),
|
||||
('en-US', 'dbexport', 'dbexport_download_link', 'Download'),
|
||||
('en-US', 'dbexport', 'dbexport_end_date', 'End date'),
|
||||
('en-US', 'dbexport', 'dbexport_export_descrip', 'Export orders in a .CSV format file'),
|
||||
('en-US', 'dbexport', 'dbexport_file_header', '\"Date\",\"Order ID\",\"Currency\",\"Closed?\",\"Amount\",\"Rate\",\"ZEC\",\"Paid?\",\"Invoice\"'),
|
||||
('en-US', 'dbexport', 'dbexport_invalid_end', 'Invalid end date'),
|
||||
('en-US', 'dbexport', 'dbexport_invalid_start', 'Invalid start date'),
|
||||
('en-US', 'dbexport', 'dbexport_noorders_created', 'You have no orders created.'),
|
||||
('en-US', 'dbexport', 'dbexport_nothing_todo', 'Nothing to do.'),
|
||||
('en-US', 'dbexport', 'dbexport_paid_no', 'No'),
|
||||
('en-US', 'dbexport', 'dbexport_paid_yes', 'Yes'),
|
||||
('en-US', 'dbexport', 'dbexport_settings_title', 'Export Orders'),
|
||||
('en-US', 'dbexport', 'dbexport_start_date', 'Start date'),
|
||||
('en-US', 'header', 'header_get_currency', 'Currency:'),
|
||||
('en-US', 'header', 'header_last_block', 'Last Block:'),
|
||||
('en-US', 'invoice', 'invoice_cant_scan', 'Can\'t scan?'),
|
||||
('en-US', 'invoice', 'invoice_copyaddress_error', 'Error while copying address'),
|
||||
('en-US', 'invoice', 'invoice_copyamount_error', 'Error while copying amount'),
|
||||
('en-US', 'invoice', 'invoice_copymemo_error', 'Error while copying Memo'),
|
||||
('en-US', 'invoice', 'invoice_copy_address', 'Copy Address'),
|
||||
('en-US', 'invoice', 'invoice_copy_amount', 'Copy Amount'),
|
||||
('en-US', 'invoice', 'invoice_copy_memo', 'Copy Memo'),
|
||||
('en-US', 'invoice', 'invoice_copy_notavail', 'Copy functionality not supported'),
|
||||
('en-US', 'invoice', 'invoice_dot_or', ', or'),
|
||||
('en-US', 'invoice', 'invoice_info_notavail', 'No information available.'),
|
||||
('en-US', 'invoice', 'invoice_invalid_id', 'Incorrect Invoice ID.'),
|
||||
('en-US', 'invoice', 'invoice_invoice_lbl', 'Invoice'),
|
||||
('en-US', 'invoice', 'invoice_invoice_total', 'Invoice Total: '),
|
||||
('en-US', 'invoice', 'invoice_notserv_close', 'Close'),
|
||||
('en-US', 'invoice', 'invoice_notserv_error', 'Error'),
|
||||
('en-US', 'invoice', 'invoice_order_date', 'Date: '),
|
||||
('en-US', 'invoice', 'invoice_order_id', 'Order ID: '),
|
||||
('en-US', 'invoice', 'invoice_order_price', 'Price '),
|
||||
('en-US', 'invoice', 'invoice_payment_confirmed', 'Payment Confirmed!!'),
|
||||
('en-US', 'invoice', 'invoice_payment_pending', 'Payment Pending!!'),
|
||||
('en-US', 'invoice', 'invoice_qty_lbl', 'Qty.'),
|
||||
('en-US', 'invoice', 'invoice_return_toshop', 'Return to Shop'),
|
||||
('en-US', 'invoice', 'invoice_scan_qrcode', 'Scan the QR code with your wallet to make payment'),
|
||||
('en-US', 'invoice', 'invoice_use_this', 'Use this '),
|
||||
('en-US', 'invoice', 'invoice_wallet_link', 'wallet link'),
|
||||
('en-US', 'invoice', 'invoice_zcash_price', 'Zcash price: '),
|
||||
('en-US', 'itemadd', 'itemadd_add_2order', 'Add Item to Order'),
|
||||
('en-US', 'itemadd', 'itemadd_cancel_btn', 'Cancel'),
|
||||
('en-US', 'itemadd', 'itemadd_save_btn', 'Add'),
|
||||
('en-US', 'itemcreate', 'itemcreate_add_item', 'Add Item'),
|
||||
('en-US', 'itemcreate', 'itemcreate_close_btn', 'Close'),
|
||||
('en-US', 'itemcreate', 'itemcreate_item_descr', 'Description'),
|
||||
('en-US', 'itemcreate', 'itemcreate_item_lbl', 'Item'),
|
||||
('en-US', 'itemcreate', 'itemcreate_item_price', 'Price'),
|
||||
('en-US', 'itemcreate', 'itemcreate_save_btn', 'Save'),
|
||||
('en-US', 'itemcreate', 'itemcreate_use_nums', 'Use only numbers'),
|
||||
('en-US', 'itemdel', 'itemdel_close_btn', 'Close'),
|
||||
('en-US', 'itemdel', 'itemdel_confirm_del', 'Are you sure you want to delete '),
|
||||
('en-US', 'itemdel', 'itemdel_delete_btn', 'Delete'),
|
||||
('en-US', 'itemdel', 'itemdel_del_item', 'Delete Item'),
|
||||
('en-US', 'itemedit', 'itemedit_close_btn', 'Close'),
|
||||
('en-US', 'itemedit', 'itemedit_edit_item', 'Edit Item'),
|
||||
('en-US', 'itemedit', 'itemedit_item_descr', 'Description'),
|
||||
('en-US', 'itemedit', 'itemedit_item_label', 'Item'),
|
||||
('en-US', 'itemedit', 'itemedit_item_price', 'Price:'),
|
||||
('en-US', 'itemedit', 'itemedit_save_btn', 'Save'),
|
||||
('en-US', 'itemlist', 'itemlist_avail_items', 'Available Items:'),
|
||||
('en-US', 'itemlist', 'itemlist_list_empty', 'No items yet!'),
|
||||
('en-US', 'listorders', 'listorders_backtoshop_btn', 'Back to Shop'),
|
||||
('en-US', 'listorders', 'listorders_export_orders', 'Export Orders'),
|
||||
('en-US', 'listorders', 'listorders_invoice_btn', 'Invoice'),
|
||||
('en-US', 'listorders', 'listorders_item_lbl', 'Item'),
|
||||
('en-US', 'listorders', 'listorders_no_orders', 'No orders'),
|
||||
('en-US', 'listorders', 'listorders_order_id', 'Order ID'),
|
||||
('en-US', 'listorders', 'listorders_order_total', 'Order Total: '),
|
||||
('en-US', 'listorders', 'listorders_overall_total', 'Overall Total: '),
|
||||
('en-US', 'listorders', 'listorders_qty_lbl', 'Qty.'),
|
||||
('en-US', 'listorders', 'listorders_receipt_btn', 'Receipt'),
|
||||
('en-US', 'listorders', 'listorders_todays_total', 'Today\'s Total: '),
|
||||
('en-US', 'listorders', 'listorders_total_lbl', 'Total'),
|
||||
('en-US', 'login', 'login_check_wallet', 'Check your wallet!!'),
|
||||
('en-US', 'login', 'login_confirm_login', 'ZGo confirms your login on the Zcash blockhain'),
|
||||
('en-US', 'login', 'login_confirm_pin', 'Confirm PIN'),
|
||||
('en-US', 'login', 'login_connect_to_zgo', 'Connect your wallet to ZGo'),
|
||||
('en-US', 'login', 'login_enter_pin', 'Enter the PIN sent by ZGo to confirm wallet ownership:'),
|
||||
('en-US', 'login', 'login_last_block', 'Last block seen:'),
|
||||
('en-US', 'login', 'login_link_wallet', 'Link Wallet'),
|
||||
('en-US', 'login', 'login_wrong_pin', 'Wrong PIN!!'),
|
||||
('en-US', 'main', 'main_price_data', 'Price data provided by CoinGecko API'),
|
||||
('en-US', 'order', 'order_cancel_btn', 'Cancel'),
|
||||
('en-US', 'order', 'order_cancel_ok', 'Order successfully cancelled!'),
|
||||
('en-US', 'order', 'order_cancel_order', 'Cancel Order?'),
|
||||
('en-US', 'order', 'order_checkout_btn', 'Checkout'),
|
||||
('en-US', 'order', 'order_confirm_cancel', 'Are you sure you want to cancel the order?'),
|
||||
('en-US', 'order', 'order_confirm_remove', 'Are you sure you want to remove '),
|
||||
('en-US', 'order', 'order_confirm_remove1', ' from this order?'),
|
||||
('en-US', 'order', 'order_invoice_btn', 'Invoice'),
|
||||
('en-US', 'order', 'order_item_lbl', 'Item'),
|
||||
('en-US', 'order', 'order_notserv_close', 'Close'),
|
||||
('en-US', 'order', 'order_notserv_success', 'success'),
|
||||
('en-US', 'order', 'order_no_openorder', 'No open order!!'),
|
||||
('en-US', 'order', 'order_qty_lbl', 'Qty.'),
|
||||
('en-US', 'order', 'order_remove_item', 'Remove Item?'),
|
||||
('en-US', 'order', 'order_total_lbl', 'Total'),
|
||||
('en-US', 'order', 'order_total_title', 'Order Total:'),
|
||||
('en-US', 'pmtservice', 'pmtservice_amount_doesnot', 'Amount does not'),
|
||||
('en-US', 'pmtservice', 'pmtservice_cant_scan', 'Can\'t scan?'),
|
||||
('en-US', 'pmtservice', 'pmtservice_connecto_xero', 'Connection to Xero'),
|
||||
('en-US', 'pmtservice', 'pmtservice_copyaddress_error', 'Error while copying address'),
|
||||
('en-US', 'pmtservice', 'pmtservice_copyamount_error', 'Error while copying amount'),
|
||||
('en-US', 'pmtservice', 'pmtservice_copymemo_error', 'Error while copying Memo'),
|
||||
('en-US', 'pmtservice', 'pmtservice_copy_address', 'Copy Address'),
|
||||
('en-US', 'pmtservice', 'pmtservice_copy_amount', 'Copy Amount'),
|
||||
('en-US', 'pmtservice', 'pmtservice_copy_memo', 'Copy Memo'),
|
||||
('en-US', 'pmtservice', 'pmtservice_copy_notavail', 'Copy functionality not supported'),
|
||||
('en-US', 'pmtservice', 'pmtservice_currency_notsup', 'not supported!!'),
|
||||
('en-US', 'pmtservice', 'pmtservice_enabled_for', 'enabled for'),
|
||||
('en-US', 'pmtservice', 'pmtservice_hdr_txt1', 'Invoice'),
|
||||
('en-US', 'pmtservice', 'pmtservice_hdr_txt2', 'Order ID: '),
|
||||
('en-US', 'pmtservice', 'pmtservice_hdr_txt3', 'Date: '),
|
||||
('en-US', 'pmtservice', 'pmtservice_invalid_ownerid', 'Invalid Owner ID!!'),
|
||||
('en-US', 'pmtservice', 'pmtservice_invoice_currency', 'Currency'),
|
||||
('en-US', 'pmtservice', 'pmtservice_invoice_invalid', 'type invalid!!'),
|
||||
('en-US', 'pmtservice', 'pmtservice_invoice_item', 'Item:'),
|
||||
('en-US', 'pmtservice', 'pmtservice_invoice_notfound', 'not found!!'),
|
||||
('en-US', 'pmtservice', 'pmtservice_invoice_num', 'Invoice'),
|
||||
('en-US', 'pmtservice', 'pmtservice_invoice_paid', 'already paid!!'),
|
||||
('en-US', 'pmtservice', 'pmtservice_invoice_price', 'Price'),
|
||||
('en-US', 'pmtservice', 'pmtservice_invoice_qty', 'Qty.'),
|
||||
('en-US', 'pmtservice', 'pmtservice_invoice_total', 'Invoice Total: '),
|
||||
('en-US', 'pmtservice', 'pmtservice_match_value', 'match value'),
|
||||
('en-US', 'pmtservice', 'pmtservice_notserv_close', 'Close'),
|
||||
('en-US', 'pmtservice', 'pmtservice_notserv_error', 'Error'),
|
||||
('en-US', 'pmtservice', 'pmtservice_payment_confirmed', 'Payment Confirmed!!'),
|
||||
('en-US', 'pmtservice', 'pmtservice_payment_notprocessed', 'Payment request was not processed!!'),
|
||||
('en-US', 'pmtservice', 'pmtservice_payment_pending', 'Payment Pending!!'),
|
||||
('en-US', 'pmtservice', 'pmtservice_pmtsrv_not', 'Payment service not'),
|
||||
('en-US', 'pmtservice', 'pmtservice_reported_byxero', 'reported by Xero!!'),
|
||||
('en-US', 'pmtservice', 'pmtservice_scan_qrcode', 'Scan the QR code with your wallet to make payment'),
|
||||
('en-US', 'pmtservice', 'pmtservice_server_failed', 'server failed!!'),
|
||||
('en-US', 'pmtservice', 'pmtservice_use_this', 'Use this '),
|
||||
('en-US', 'pmtservice', 'pmtservice_wallet_link', 'wallet link'),
|
||||
('en-US', 'pmtservice', 'pmtservice_zecdata_price', 'Zcash Price: '),
|
||||
('en-US', 'pmtservice', 'pmtservice_zecdata_total', 'Total: '),
|
||||
('en-US', 'promptinvoice', 'promptinvoice_func_notavail', 'Functionality not available for your browser. Use send button instead.'),
|
||||
('en-US', 'promptinvoice', 'promptinvoice_invoice_cancel', 'Cancel'),
|
||||
('en-US', 'promptinvoice', 'promptinvoice_invoice_clipboard', 'Invoice\'s URL copied to Clipboard!!'),
|
||||
('en-US', 'promptinvoice', 'promptinvoice_invoice_sent', 'Sent!'),
|
||||
('en-US', 'promptinvoice', 'promptinvoice_invoice_url', 'Invoice URL:'),
|
||||
('en-US', 'promptinvoice', 'promptinvoice_notserv_close', 'Close'),
|
||||
('en-US', 'promptinvoice', 'promptinvoice_notserv_error', 'Error'),
|
||||
('en-US', 'promptinvoice', 'promptinvoice_notserv_success', 'Success'),
|
||||
('en-US', 'promptinvoice', 'promptinvoice_send_link', 'Send the invoice link to your client:'),
|
||||
('en-US', 'promptreceipt', 'promptreceipt_close_lbl', 'Close'),
|
||||
('en-US', 'promptreceipt', 'promptreceipt_func_notavail', 'Functionality not available for your browser. Use send button '),
|
||||
('en-US', 'promptreceipt', 'promptreceipt_notserv_close', 'Close'),
|
||||
('en-US', 'promptreceipt', 'promptreceipt_notserv_error', 'Error'),
|
||||
('en-US', 'promptreceipt', 'promptreceipt_notserv_success', 'Success'),
|
||||
('en-US', 'promptreceipt', 'promptreceipt_receipt_clipboard', 'Receipt\'s URL copied to Clipboard!!'),
|
||||
('en-US', 'promptreceipt', 'promptreceipt_receipt_url', 'Receipt URL:'),
|
||||
('en-US', 'promptreceipt', 'promptreceipt_send_link', 'Send the receipt link to your client:'),
|
||||
('en-US', 'receipt', 'receipt_info_notavail', 'No information available.'),
|
||||
('en-US', 'receipt', 'receipt_invalid_id', 'Incorrect receipt ID.'),
|
||||
('en-US', 'receipt', 'receipt_order_date', 'Date: '),
|
||||
('en-US', 'receipt', 'receipt_order_id', 'Order ID: '),
|
||||
('en-US', 'receipt', 'receipt_order_price', 'Price: '),
|
||||
('en-US', 'receipt', 'receipt_order_total', 'Total: '),
|
||||
('en-US', 'receipt', 'receipt_qty_lbl', 'Qty.'),
|
||||
('en-US', 'receipt', 'receipt_receipt_lbl', 'Receipt'),
|
||||
('en-US', 'receipt', 'receipt_zcash_price', 'Zcash Price: '),
|
||||
('en-US', 'receiptqr', 'receiptqr_close_btn', 'Close'),
|
||||
('en-US', 'receiptqr', 'receiptqr_scan_receipt', 'Scan for your Receipt'),
|
||||
('en-US', 'scan', 'scan_close_btn', 'Close'),
|
||||
('en-US', 'scan', 'scan_copy_address', 'Copy Address'),
|
||||
('en-US', 'scan', 'scan_copy_amount', 'Copy Amount'),
|
||||
('en-US', 'scan', 'scan_copy_error', 'Error while copying ammount'),
|
||||
('en-US', 'scan', 'scan_copy_memo', 'Copy Memo'),
|
||||
('en-US', 'scan', 'scan_fail_payment', 'Error while verifying payment'),
|
||||
('en-US', 'scan', 'scan_func_notavail', 'Copy functionality not supported'),
|
||||
('en-US', 'scan', 'scan_memo_sent', 'Memo Sent!'),
|
||||
('en-US', 'scan', 'scan_notserv_close', 'Close'),
|
||||
('en-US', 'scan', 'scan_notserv_error', 'Error'),
|
||||
('en-US', 'scan', 'scan_scanqr_code', 'Scan the QR code'),
|
||||
('en-US', 'scan', 'scan_text_info', 'Ensure to check the \"Include Reply-To\" box in your wallet before sending your memo.'),
|
||||
('en-US', 'scan', 'scan_use_this', 'Can\'t scan? Use this '),
|
||||
('en-US', 'scan', 'scan_wallet_link', 'wallet link'),
|
||||
('en-US', 'settings', 'settings_acode_invalid', 'Invalid Account code (10 chars max.)'),
|
||||
('en-US', 'settings', 'settings_acode_lbl', 'Account Code:'),
|
||||
('en-US', 'settings', 'settings_acode_notsaved', 'Account Code not saved'),
|
||||
('en-US', 'settings', 'settings_acode_saved', 'Account Code saved!!'),
|
||||
('en-US', 'settings', 'settings_close_btn', 'Cancel'),
|
||||
('en-US', 'settings', 'settings_confirm_payments', 'Confirm payments?'),
|
||||
('en-US', 'settings', 'settings_copy_notavail', 'Functionality not available for your browser. Use send button instead.'),
|
||||
('en-US', 'settings', 'settings_currency_lbl', 'Currency'),
|
||||
('en-US', 'settings', 'settings_link_2xero', 'Link to Xero'),
|
||||
('en-US', 'settings', 'settings_name_lbl', 'Name'),
|
||||
('en-US', 'settings', 'settings_name_placeholder', 'Your Name'),
|
||||
('en-US', 'settings', 'settings_notserv_close', 'Close'),
|
||||
('en-US', 'settings', 'settings_notserv_error', 'Error'),
|
||||
('en-US', 'settings', 'settings_notserv_success', 'Success'),
|
||||
('en-US', 'settings', 'settings_notserv_warning', 'Warning'),
|
||||
('en-US', 'settings', 'settings_ownerid_copied', 'Owner ID copied to clipboard'),
|
||||
('en-US', 'settings', 'settings_ownerid_notcopied', 'Copying not available in your browser'),
|
||||
('en-US', 'settings', 'settings_pmtserv_url', 'Payment Service URL:'),
|
||||
('en-US', 'settings', 'settings_relink_2xero', 'Relink to Xero'),
|
||||
('en-US', 'settings', 'settings_save_btn', 'Save'),
|
||||
('en-US', 'settings', 'settings_tab_integrations', 'Integrations'),
|
||||
('en-US', 'settings', 'settings_tab_mainlbl', 'Main'),
|
||||
('en-US', 'settings', 'settings_URL_copied', 'ZGo URL copied to Clipboard!!'),
|
||||
('en-US', 'settings', 'settings_use_satoshi', 'Use zatoshis?'),
|
||||
('en-US', 'settings', 'settings_view_title', 'Settings'),
|
||||
('en-US', 'settings', 'settings_vkey_lbl', 'Viewing key'),
|
||||
('en-US', 'settings', 'settings_vkey_placeholder', 'Your wallet viewing key'),
|
||||
('en-US', 'settings', 'settings_wctoken_copied', 'WooCommerce Token copied to clipboard'),
|
||||
('en-US', 'settings', 'settings_wctoken_generated', 'WooCommerce Token generated!'),
|
||||
('en-US', 'settings', 'settings_wctoken_genfail', 'WooCommerce Token generation failed'),
|
||||
('en-US', 'settings', 'settings_wctoken_notcopied', 'Copying not available in your browser'),
|
||||
('en-US', 'settings', 'settings_wc_closebtn', 'Close'),
|
||||
('en-US', 'settings', 'settings_wc_gentoken', 'Generate Token'),
|
||||
('en-US', 'settings', 'settings_wc_lbl', 'WooCommerce'),
|
||||
('en-US', 'settings', 'settings_wc_ownerlbl', 'Owner:'),
|
||||
('en-US', 'settings', 'settings_xeropmt_confirmdis', 'Xero Payment confirmation disabled!!'),
|
||||
('en-US', 'settings', 'settings_xero_closebtn', 'Close'),
|
||||
('en-US', 'settings', 'settings_xero_lbl', 'Xero'),
|
||||
('en-US', 'settings', 'settings_xero_savebtn', 'Save Code'),
|
||||
('en-US', 'viewer', 'viewer_view_orders', 'View Orders'),
|
||||
('en-US', 'xero', 'xero_connected_2xero', 'Connected to Xero!'),
|
||||
('en-US', 'xero', 'xero_connecting_2xero', 'Connecting to Xero..'),
|
||||
('es-US', 'business', 'business_accept_terms', 'Acepto los '),
|
||||
('es-US', 'business', 'business_addrs_nobiz', 'No tenemos un negocio asociado a esta dirección de Zcash, por favor ingrese su información abajo:'),
|
||||
('es-US', 'business', 'business_biz_addressholder', 'Dirección'),
|
||||
('es-US', 'business', 'business_biz_addresslbl', 'Dirección:'),
|
||||
('es-US', 'business', 'business_biz_cityholder', 'Ciudad'),
|
||||
('es-US', 'business', 'business_biz_citylbl', 'Ciudad:'),
|
||||
('es-US', 'business', 'business_biz_countryholder', 'País'),
|
||||
('es-US', 'business', 'business_biz_countrylbl', 'País:'),
|
||||
('es-US', 'business', 'business_biz_info', 'Ingrese datos del negocio'),
|
||||
('es-US', 'business', 'business_biz_mailholder', 'ejemplo@dominio.com'),
|
||||
('es-US', 'business', 'business_biz_maillbl', 'E-mail:'),
|
||||
('es-US', 'business', 'business_biz_nameholder', 'Nombre del negocio'),
|
||||
('es-US', 'business', 'business_biz_namelbl', 'Nombre del Negocio:'),
|
||||
('es-US', 'business', 'business_biz_pcodeholder', 'Código Postal'),
|
||||
('es-US', 'business', 'business_biz_pcodelbl', 'Código Postal:'),
|
||||
('es-US', 'business', 'business_biz_stateholder', 'Estado o Provincia'),
|
||||
('es-US', 'business', 'business_biz_statelbl', 'Estado/Provincia:'),
|
||||
('es-US', 'business', 'business_biz_websiteholder', 'Sitio web'),
|
||||
('es-US', 'business', 'business_biz_websitelbl', 'Sitio Web:'),
|
||||
('es-US', 'business', 'business_contact_fnamelbl', 'Nombre del Contacto:'),
|
||||
('es-US', 'business', 'business_contact_fnholder', 'Nombre'),
|
||||
('es-US', 'business', 'business_contact_lnamelbl', 'Apellido del Contacto:'),
|
||||
('es-US', 'business', 'business_contact_lnholder', 'Apellido'),
|
||||
('es-US', 'business', 'business_save_btn', 'Salvar'),
|
||||
('es-US', 'business', 'business_select_session', 'Seleccione la duración de la sessión que necesita:'),
|
||||
('es-US', 'business', 'business_session_label', 'Sesión:'),
|
||||
('es-US', 'business', 'business_session_lengthlbl', 'Duración de la Sesión'),
|
||||
('es-US', 'business', 'business_session_paylbl', 'Pagar'),
|
||||
('es-US', 'business', 'business_signup_title', 'Registrar Negocio'),
|
||||
('es-US', 'business', 'business_terms_ofuse', 'Términos de Uso'),
|
||||
('es-US', 'business', 'business_zgo_confirmlbl', 'ZGo confirma su pago'),
|
||||
('es-US', 'cancel', 'cancel_confirm_btn', 'Confirmar'),
|
||||
('es-US', 'cancel', 'cancel_dismiss_btn', 'Descartar'),
|
||||
('es-US', 'cancel', 'cancel_title', 'Cancelar'),
|
||||
('es-US', 'checkout', 'checkout_accept_btn', 'Aceptar'),
|
||||
('es-US', 'checkout', 'checkout_cant_scan', 'No puede escanear?'),
|
||||
('es-US', 'checkout', 'checkout_close_btn', 'Cerrar'),
|
||||
('es-US', 'checkout', 'checkout_copyaddress_error', 'Error al copiar dirección'),
|
||||
('es-US', 'checkout', 'checkout_copyamount_error', 'Error al copiar el valor'),
|
||||
('es-US', 'checkout', 'checkout_copymemo_error', 'Error al copiar Memo'),
|
||||
('es-US', 'checkout', 'checkout_copy_address', 'Copiar Dirección'),
|
||||
('es-US', 'checkout', 'checkout_copy_amount', 'Copie Valor'),
|
||||
('es-US', 'checkout', 'checkout_copy_memo', 'Copie Valor'),
|
||||
('es-US', 'checkout', 'checkout_copy_notavail', 'Fucionalidad de copia no soportada!!'),
|
||||
('es-US', 'checkout', 'checkout_notserv_close', 'Cerrar'),
|
||||
('es-US', 'checkout', 'checkout_notserv_error', 'Error'),
|
||||
('es-US', 'checkout', 'checkout_scan_payment', 'Escanee para hacer el pago'),
|
||||
('es-US', 'checkout', 'checkout_use_this', 'Use este '),
|
||||
('es-US', 'checkout', 'checkout_wallet_link', 'link a billetera'),
|
||||
('es-US', 'checkout', 'checkout_wallet_or', ', o '),
|
||||
('es-US', 'dbexport', 'dbexport_btn_close', 'Cancelar'),
|
||||
('es-US', 'dbexport', 'dbexport_closed_no', 'No'),
|
||||
('es-US', 'dbexport', 'dbexport_closed_yes', 'Si'),
|
||||
('es-US', 'dbexport', 'dbexport_date_range', 'Rango de Fechas:'),
|
||||
('es-US', 'dbexport', 'dbexport_download_link', 'Descargar'),
|
||||
('es-US', 'dbexport', 'dbexport_end_date', 'Fecha final'),
|
||||
('es-US', 'dbexport', 'dbexport_export_descrip', 'Exportar órdenes en un archivo de formato .CSV'),
|
||||
('es-US', 'dbexport', 'dbexport_file_header', '\"Fecha\",\"ID Orden\",\"Moneda\",\"Cerrada?\",\"Valor\",\"Tasa\",\"ZEC\",\"Pagada?\",\"Factura\"'),
|
||||
('es-US', 'dbexport', 'dbexport_invalid_end', 'Fecha final inválida'),
|
||||
('es-US', 'dbexport', 'dbexport_invalid_start', 'Fecha de inicio inválida'),
|
||||
('es-US', 'dbexport', 'dbexport_noorders_created', 'Usted no tiene órdenes creadas.'),
|
||||
('es-US', 'dbexport', 'dbexport_nothing_todo', 'Nada que hacer.'),
|
||||
('es-US', 'dbexport', 'dbexport_paid_no', 'No'),
|
||||
('es-US', 'dbexport', 'dbexport_paid_yes', 'Si'),
|
||||
('es-US', 'dbexport', 'dbexport_settings_title', 'Exportar Ordenes'),
|
||||
('es-US', 'dbexport', 'dbexport_start_date', 'Fecha inicial'),
|
||||
('es-US', 'header', 'header_get_currency', 'Moneda:'),
|
||||
('es-US', 'header', 'header_last_block', 'Último Bloque:'),
|
||||
('es-US', 'invoice', 'invoice_cant_scan', 'No puede escanear?'),
|
||||
('es-US', 'invoice', 'invoice_copyaddress_error', 'Error al copiar dirección'),
|
||||
('es-US', 'invoice', 'invoice_copyamount_error', 'Error al copiar valor'),
|
||||
('es-US', 'invoice', 'invoice_copymemo_error', 'Error al copiar Memo'),
|
||||
('es-US', 'invoice', 'invoice_copy_address', 'Copie Dirección'),
|
||||
('es-US', 'invoice', 'invoice_copy_amount', 'Copiar Valor'),
|
||||
('es-US', 'invoice', 'invoice_copy_memo', 'Copiar Memo'),
|
||||
('es-US', 'invoice', 'invoice_copy_notavail', 'Funcionalidad para copia no soportada'),
|
||||
('es-US', 'invoice', 'invoice_dot_or', ', o'),
|
||||
('es-US', 'invoice', 'invoice_info_notavail', 'No hay información disponible.'),
|
||||
('es-US', 'invoice', 'invoice_invalid_id', 'ID de Factura incorrecto.'),
|
||||
('es-US', 'invoice', 'invoice_invoice_lbl', 'Factura'),
|
||||
('es-US', 'invoice', 'invoice_invoice_total', 'Total Factura: '),
|
||||
('es-US', 'invoice', 'invoice_notserv_close', 'Cerrar'),
|
||||
('es-US', 'invoice', 'invoice_notserv_error', 'Error'),
|
||||
('es-US', 'invoice', 'invoice_order_date', 'Fecha: '),
|
||||
('es-US', 'invoice', 'invoice_order_id', 'ID del Pedido: '),
|
||||
('es-US', 'invoice', 'invoice_order_price', 'Precio '),
|
||||
('es-US', 'invoice', 'invoice_payment_confirmed', 'Pago Confirmado!!'),
|
||||
('es-US', 'invoice', 'invoice_payment_pending', 'Pago Pendiente!!'),
|
||||
('es-US', 'invoice', 'invoice_qty_lbl', 'Cant.'),
|
||||
('es-US', 'invoice', 'invoice_return_toshop', 'Regresar a Tienda'),
|
||||
('es-US', 'invoice', 'invoice_scan_qrcode', 'Escanee el código QR con su billetera para hacer el pago'),
|
||||
('es-US', 'invoice', 'invoice_use_this', 'Use este '),
|
||||
('es-US', 'invoice', 'invoice_wallet_link', 'link de billetera'),
|
||||
('es-US', 'invoice', 'invoice_zcash_price', 'Precio de Zcash: '),
|
||||
('es-US', 'itemadd', 'itemadd_add_2order', 'Agregar Item a la orden'),
|
||||
('es-US', 'itemadd', 'itemadd_cancel_btn', 'Cancelar'),
|
||||
('es-US', 'itemadd', 'itemadd_save_btn', 'Agregar'),
|
||||
('es-US', 'itemcreate', 'itemcreate_add_item', 'Agregar Item'),
|
||||
('es-US', 'itemcreate', 'itemcreate_close_btn', 'Cerrar'),
|
||||
('es-US', 'itemcreate', 'itemcreate_item_descr', 'Descripcion'),
|
||||
('es-US', 'itemcreate', 'itemcreate_item_lbl', 'Item'),
|
||||
('es-US', 'itemcreate', 'itemcreate_item_price', 'Precio'),
|
||||
('es-US', 'itemcreate', 'itemcreate_save_btn', 'Grabar'),
|
||||
('es-US', 'itemcreate', 'itemcreate_use_nums', 'Use solo números'),
|
||||
('es-US', 'itemdel', 'itemdel_close_btn', 'Cerrar'),
|
||||
('es-US', 'itemdel', 'itemdel_confirm_del', 'Esta seguro de querer eliminar el item '),
|
||||
('es-US', 'itemdel', 'itemdel_delete_btn', 'Eliminar'),
|
||||
('es-US', 'itemdel', 'itemdel_del_item', 'Eliminar Item'),
|
||||
('es-US', 'itemedit', 'itemedit_close_btn', 'Cerrar'),
|
||||
('es-US', 'itemedit', 'itemedit_edit_item', 'Editar Item'),
|
||||
('es-US', 'itemedit', 'itemedit_item_descr', 'Descripcion'),
|
||||
('es-US', 'itemedit', 'itemedit_item_label', 'Item'),
|
||||
('es-US', 'itemedit', 'itemedit_item_price', 'Precio:'),
|
||||
('es-US', 'itemedit', 'itemedit_save_btn', 'Guardar'),
|
||||
('es-US', 'itemlist', 'itemlist_avail_items', 'Items Disponibles:'),
|
||||
('es-US', 'itemlist', 'itemlist_list_empty', 'No existen items!'),
|
||||
('es-US', 'listorders', 'listorders_backtoshop_btn', 'Regresar a Tienda'),
|
||||
('es-US', 'listorders', 'listorders_export_orders', 'Exportar Pedidos'),
|
||||
('es-US', 'listorders', 'listorders_invoice_btn', 'Factura'),
|
||||
('es-US', 'listorders', 'listorders_item_lbl', 'Item'),
|
||||
('es-US', 'listorders', 'listorders_no_orders', 'No hay órdenes'),
|
||||
('es-US', 'listorders', 'listorders_order_id', 'ID de Orden'),
|
||||
('es-US', 'listorders', 'listorders_order_total', 'Total de la Orden:'),
|
||||
('es-US', 'listorders', 'listorders_overall_total', 'Total General: '),
|
||||
('es-US', 'listorders', 'listorders_qty_lbl', 'Cant.'),
|
||||
('es-US', 'listorders', 'listorders_receipt_btn', 'Recibo'),
|
||||
('es-US', 'listorders', 'listorders_todays_total', 'Total del Dia: '),
|
||||
('es-US', 'listorders', 'listorders_total_lbl', 'Total'),
|
||||
('es-US', 'login', 'login_check_wallet', 'Verifique su billetera!!'),
|
||||
('es-US', 'login', 'login_confirm_login', 'ZGo confirma su ingreso en la cadena de Zcash'),
|
||||
('es-US', 'login', 'login_confirm_pin', 'Confirme el PIN'),
|
||||
('es-US', 'login', 'login_connect_to_zgo', 'Conectar su billetera a ZGo'),
|
||||
('es-US', 'login', 'login_enter_pin', 'Ingrese el PIN enviado por ZGo para confirmar su billetera:'),
|
||||
('es-US', 'login', 'login_last_block', 'Ultimo Bloque Verificado: '),
|
||||
('es-US', 'login', 'login_link_wallet', 'Asociar Billetera'),
|
||||
('es-US', 'login', 'login_wrong_pin', 'PIN Invalido!!'),
|
||||
('es-US', 'main', 'main_price_data', 'Precios provistos por API de CoinGecko'),
|
||||
('es-US', 'order', 'order_cancel_btn', 'Cancelar'),
|
||||
('es-US', 'order', 'order_cancel_ok', 'Orden cancelada exitosamente!'),
|
||||
('es-US', 'order', 'order_cancel_order', 'Cancelar Orden?'),
|
||||
('es-US', 'order', 'order_checkout_btn', 'Procesar'),
|
||||
('es-US', 'order', 'order_confirm_cancel', 'Esta seguro que quiere cancelar la orden?'),
|
||||
('es-US', 'order', 'order_confirm_remove', 'Esta seguro de querer remover '),
|
||||
('es-US', 'order', 'order_confirm_remove1', ' de esta orden?'),
|
||||
('es-US', 'order', 'order_invoice_btn', 'Factura'),
|
||||
('es-US', 'order', 'order_item_lbl', 'Item'),
|
||||
('es-US', 'order', 'order_notserv_close', 'Cerrar'),
|
||||
('es-US', 'order', 'order_notserv_success', 'confirmado'),
|
||||
('es-US', 'order', 'order_no_openorder', 'Sin órden abierta!!'),
|
||||
('es-US', 'order', 'order_qty_lbl', 'Cant.'),
|
||||
('es-US', 'order', 'order_remove_item', 'Remover Item?'),
|
||||
('es-US', 'order', 'order_total_lbl', 'Total'),
|
||||
('es-US', 'order', 'order_total_title', 'Total Pedido:'),
|
||||
('es-US', 'pmtservice', 'pmtservice_amount_doesnot', 'Total no'),
|
||||
('es-US', 'pmtservice', 'pmtservice_cant_scan', 'No puede escanear?'),
|
||||
('es-US', 'pmtservice', 'pmtservice_connecto_xero', 'Conexion con Xero'),
|
||||
('es-US', 'pmtservice', 'pmtservice_copyaddress_error', 'Error al copiar dirección'),
|
||||
('es-US', 'pmtservice', 'pmtservice_copyamount_error', 'Error al copiar valor'),
|
||||
('es-US', 'pmtservice', 'pmtservice_copymemo_error', 'Error al copiar Memo'),
|
||||
('es-US', 'pmtservice', 'pmtservice_copy_address', 'Copiar Dirección'),
|
||||
('es-US', 'pmtservice', 'pmtservice_copy_amount', 'Copiar Valor'),
|
||||
('es-US', 'pmtservice', 'pmtservice_copy_memo', 'Copiar Memo'),
|
||||
('es-US', 'pmtservice', 'pmtservice_copy_notavail', 'Funcionalidad para copia no soportada'),
|
||||
('es-US', 'pmtservice', 'pmtservice_currency_notsup', 'no soportada!!'),
|
||||
('es-US', 'pmtservice', 'pmtservice_enabled_for', 'habilitado para'),
|
||||
('es-US', 'pmtservice', 'pmtservice_hdr_txt1', 'Factura'),
|
||||
('es-US', 'pmtservice', 'pmtservice_hdr_txt2', 'ID de Orden: '),
|
||||
('es-US', 'pmtservice', 'pmtservice_hdr_txt3', 'Fecha: '),
|
||||
('es-US', 'pmtservice', 'pmtservice_invalid_ownerid', 'ID de propietario inválida!!'),
|
||||
('es-US', 'pmtservice', 'pmtservice_invoice_currency', 'Moneda'),
|
||||
('es-US', 'pmtservice', 'pmtservice_invoice_invalid', 'tipo inválido!!'),
|
||||
('es-US', 'pmtservice', 'pmtservice_invoice_item', 'Item:'),
|
||||
('es-US', 'pmtservice', 'pmtservice_invoice_notfound', 'no encontrada!!'),
|
||||
('es-US', 'pmtservice', 'pmtservice_invoice_num', 'Factura'),
|
||||
('es-US', 'pmtservice', 'pmtservice_invoice_paid', 'ya pagada!!'),
|
||||
('es-US', 'pmtservice', 'pmtservice_invoice_price', 'Precio'),
|
||||
('es-US', 'pmtservice', 'pmtservice_invoice_qty', 'Cant.'),
|
||||
('es-US', 'pmtservice', 'pmtservice_invoice_total', 'Total Factura:'),
|
||||
('es-US', 'pmtservice', 'pmtservice_match_value', 'es igual al valor'),
|
||||
('es-US', 'pmtservice', 'pmtservice_notserv_close', 'Cerrar'),
|
||||
('es-US', 'pmtservice', 'pmtservice_notserv_error', 'Error'),
|
||||
('es-US', 'pmtservice', 'pmtservice_payment_confirmed', 'Pago Confirmado!!'),
|
||||
('es-US', 'pmtservice', 'pmtservice_payment_notprocessed', 'Solicitud de pago no fue procesada!!'),
|
||||
('es-US', 'pmtservice', 'pmtservice_payment_pending', 'Pago Pendiente!!'),
|
||||
('es-US', 'pmtservice', 'pmtservice_pmtsrv_not', 'Servicio de pagos no '),
|
||||
('es-US', 'pmtservice', 'pmtservice_reported_byxero', 'reportado por Xero!!'),
|
||||
('es-US', 'pmtservice', 'pmtservice_scan_qrcode', 'Escanee el código QR con su billetera para hacer el pago'),
|
||||
('es-US', 'pmtservice', 'pmtservice_server_failed', 'servidor falló!!'),
|
||||
('es-US', 'pmtservice', 'pmtservice_use_this', 'Use este '),
|
||||
('es-US', 'pmtservice', 'pmtservice_wallet_link', 'link de billetera'),
|
||||
('es-US', 'pmtservice', 'pmtservice_zecdata_price', 'Precio Zcash: '),
|
||||
('es-US', 'pmtservice', 'pmtservice_zecdata_total', 'Total: '),
|
||||
('es-US', 'promptinvoice', 'promptinvoice_func_notavail', 'Funcionalidad no disponible en su navegador. Use el botón de enviar en lugar de eso.'),
|
||||
('es-US', 'promptinvoice', 'promptinvoice_invoice_cancel', 'Cancelar'),
|
||||
('es-US', 'promptinvoice', 'promptinvoice_invoice_clipboard', 'URL de la factura copiado al Portapapeles!!'),
|
||||
('es-US', 'promptinvoice', 'promptinvoice_invoice_sent', 'Enviado!'),
|
||||
('es-US', 'promptinvoice', 'promptinvoice_invoice_url', 'URL de Factura:'),
|
||||
('es-US', 'promptinvoice', 'promptinvoice_notserv_close', 'Cerrar'),
|
||||
('es-US', 'promptinvoice', 'promptinvoice_notserv_error', 'Error'),
|
||||
('es-US', 'promptinvoice', 'promptinvoice_notserv_success', 'Suceso');
|
||||
INSERT INTO `languages` (`encode_id`, `view_name`, `view_element`, `view_element_text`) VALUES
|
||||
('es-US', 'promptinvoice', 'promptinvoice_send_link', 'Envíe el link de la factura a su cliente:'),
|
||||
('es-US', 'promptreceipt', 'promptreceipt_close_lbl', 'Cerrar'),
|
||||
('es-US', 'promptreceipt', 'promptreceipt_func_notavail', 'Functionality not available for your browser. Use send button '),
|
||||
('es-US', 'promptreceipt', 'promptreceipt_notserv_close', 'Cerrar'),
|
||||
('es-US', 'promptreceipt', 'promptreceipt_notserv_error', 'Error'),
|
||||
('es-US', 'promptreceipt', 'promptreceipt_notserv_success', 'Suceso'),
|
||||
('es-US', 'promptreceipt', 'promptreceipt_receipt_clipboard', 'URL del Recibo copiado a portapapeles!!'),
|
||||
('es-US', 'promptreceipt', 'promptreceipt_receipt_url', 'URL del Recibo:'),
|
||||
('es-US', 'promptreceipt', 'promptreceipt_send_link', 'Envíe el enlace del recibo a su cliente :'),
|
||||
('es-US', 'receipt', 'receipt_info_notavail', 'No hay información disponible.'),
|
||||
('es-US', 'receipt', 'receipt_invalid_id', 'ID de Recibo incorrecto.'),
|
||||
('es-US', 'receipt', 'receipt_order_date', 'Fecha: '),
|
||||
('es-US', 'receipt', 'receipt_order_id', 'ID de Orden:'),
|
||||
('es-US', 'receipt', 'receipt_order_price', 'Precio: '),
|
||||
('es-US', 'receipt', 'receipt_order_total', 'Total: '),
|
||||
('es-US', 'receipt', 'receipt_qty_lbl', 'Cant.'),
|
||||
('es-US', 'receipt', 'receipt_receipt_lbl', 'Recibo '),
|
||||
('es-US', 'receipt', 'receipt_zcash_price', 'Precio de Zcash: '),
|
||||
('es-US', 'receiptqr', 'receiptqr_close_btn', 'Cerrar'),
|
||||
('es-US', 'receiptqr', 'receiptqr_scan_receipt', 'Escanee para obtener su Recibo'),
|
||||
('es-US', 'scan', 'scan_close_btn', 'Cerrar'),
|
||||
('es-US', 'scan', 'scan_copy_address', 'Copiar Dirección'),
|
||||
('es-US', 'scan', 'scan_copy_amount', 'Copiar Valor'),
|
||||
('es-US', 'scan', 'scan_copy_error', 'Error al copiar valor'),
|
||||
('es-US', 'scan', 'scan_copy_memo', 'Copiar Memo'),
|
||||
('es-US', 'scan', 'scan_fail_payment', 'Error al verificar pago'),
|
||||
('es-US', 'scan', 'scan_func_notavail', 'Funcionalidad de copia no soportada'),
|
||||
('es-US', 'scan', 'scan_memo_sent', 'Memorando enviado!'),
|
||||
('es-US', 'scan', 'scan_notserv_close', 'Cerrar'),
|
||||
('es-US', 'scan', 'scan_notserv_error', 'Error'),
|
||||
('es-US', 'scan', 'scan_scanqr_code', 'Escanee el código QR'),
|
||||
('es-US', 'scan', 'scan_text_info', 'Asegúrese de marcar la caja \"Incluir Responder-A\" en su billetera antes de enviar su memo'),
|
||||
('es-US', 'scan', 'scan_use_this', 'No puede escanear? Use este '),
|
||||
('es-US', 'scan', 'scan_wallet_link', 'Link de billetera'),
|
||||
('es-US', 'settings', 'settings_acode_invalid', 'Código de Cuenta inválido (10 caracteres max.)'),
|
||||
('es-US', 'settings', 'settings_acode_lbl', 'Código de Cuenta:'),
|
||||
('es-US', 'settings', 'settings_acode_notsaved', 'Código de cuenta no guardado!'),
|
||||
('es-US', 'settings', 'settings_acode_saved', 'Código de cuenta guardado!!'),
|
||||
('es-US', 'settings', 'settings_close_btn', 'Cancelar'),
|
||||
('es-US', 'settings', 'settings_confirm_payments', 'Confirmar pagos?'),
|
||||
('es-US', 'settings', 'settings_copy_notavail', 'Funcionalidad no disponible para su navegador. Use el botón de enviar.'),
|
||||
('es-US', 'settings', 'settings_currency_lbl', 'Moneda'),
|
||||
('es-US', 'settings', 'settings_link_2xero', 'Enlazar a Xero'),
|
||||
('es-US', 'settings', 'settings_name_lbl', 'Nombre'),
|
||||
('es-US', 'settings', 'settings_name_placeholder', 'Su nombre'),
|
||||
('es-US', 'settings', 'settings_notserv_close', 'Cerrar'),
|
||||
('es-US', 'settings', 'settings_notserv_error', 'Error'),
|
||||
('es-US', 'settings', 'settings_notserv_success', 'Suceso'),
|
||||
('es-US', 'settings', 'settings_notserv_warning', 'Advertencia'),
|
||||
('es-US', 'settings', 'settings_ownerid_copied', 'ID del propietario copiado a la papelera'),
|
||||
('es-US', 'settings', 'settings_ownerid_notcopied', 'Copiar no disponible en su navegador'),
|
||||
('es-US', 'settings', 'settings_pmtserv_url', 'URL del Servicio de Pago:'),
|
||||
('es-US', 'settings', 'settings_relink_2xero', 'Reconectar a Xero'),
|
||||
('es-US', 'settings', 'settings_save_btn', 'Salvar'),
|
||||
('es-US', 'settings', 'settings_tab_integrations', 'Integraciones'),
|
||||
('es-US', 'settings', 'settings_tab_mainlbl', 'Principal'),
|
||||
('es-US', 'settings', 'settings_URL_copied', 'URL de ZGo copiado a la papelera!!'),
|
||||
('es-US', 'settings', 'settings_use_satoshi', 'Usar zatoshis?'),
|
||||
('es-US', 'settings', 'settings_view_title', 'Configuración'),
|
||||
('es-US', 'settings', 'settings_vkey_lbl', 'Clave de visualización'),
|
||||
('es-US', 'settings', 'settings_vkey_placeholder', 'Clave de visualización de su billetera'),
|
||||
('es-US', 'settings', 'settings_wctoken_copied', 'Token de WooCommerce copiado a la papelera'),
|
||||
('es-US', 'settings', 'settings_wctoken_generated', 'Token de WooCommerce generado!'),
|
||||
('es-US', 'settings', 'settings_wctoken_genfail', 'Falla generación de Token de WooCommerce'),
|
||||
('es-US', 'settings', 'settings_wctoken_notcopied', 'Copiar no disponible en su navegador'),
|
||||
('es-US', 'settings', 'settings_wc_closebtn', 'Cerrar'),
|
||||
('es-US', 'settings', 'settings_wc_gentoken', 'Generar Token'),
|
||||
('es-US', 'settings', 'settings_wc_lbl', 'WooCommerce'),
|
||||
('es-US', 'settings', 'settings_wc_ownerlbl', 'Propietario:'),
|
||||
('es-US', 'settings', 'settings_xeropmt_confirmdis', 'Confirmación de pagos de Xero desactivada!!'),
|
||||
('es-US', 'settings', 'settings_xero_closebtn', 'Cerrar'),
|
||||
('es-US', 'settings', 'settings_xero_lbl', 'Xero'),
|
||||
('es-US', 'settings', 'settings_xero_savebtn', 'Guardar Código'),
|
||||
('es-US', 'viewer', 'viewer_view_orders', 'Ver Ordenes'),
|
||||
('es-US', 'xero', 'xero_connected_2xero', 'Conectado a Xero!'),
|
||||
('es-US', 'xero', 'xero_connecting_2xero', 'Conectando a Xero..');
|
||||
|
||||
--
|
||||
-- Indexes for dumped tables
|
||||
--
|
||||
|
||||
--
|
||||
-- Indexes for table `languages`
|
||||
--
|
||||
ALTER TABLE `languages`
|
||||
ADD UNIQUE KEY `language_ix` (`encode_id`,`view_name`,`view_element`);
|
||||
COMMIT;
|
||||
|
||||
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
||||
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
21614
package-lock.json
generated
21614
package-lock.json
generated
File diff suppressed because it is too large
Load diff
82
package.json
82
package.json
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "zgo",
|
||||
"version": "1.2.2",
|
||||
"version": "2.4.0",
|
||||
"scripts": {
|
||||
"ng": "ng",
|
||||
"start": "ng serve",
|
||||
|
@ -10,50 +10,52 @@
|
|||
},
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@angular/animations": "^14.0.5",
|
||||
"@angular/cdk": "^13.3.9",
|
||||
"@angular/common": "^14.0.5",
|
||||
"@angular/compiler": "^14.0.5",
|
||||
"@angular/core": "^14.0.5",
|
||||
"@angular/forms": "^14.0.5",
|
||||
"@angular/material": "^13.3.9",
|
||||
"@angular/platform-browser": "^14.0.5",
|
||||
"@angular/platform-browser-dynamic": "^14.0.5",
|
||||
"@angular/router": "^14.0.5",
|
||||
"@fortawesome/angular-fontawesome": "^0.10.2",
|
||||
"@fortawesome/fontawesome-free": "^6.1.1",
|
||||
"@fortawesome/fontawesome-svg-core": "^6.1.0",
|
||||
"@fortawesome/free-brands-svg-icons": "^6.1.0",
|
||||
"@fortawesome/free-regular-svg-icons": "^6.1.0",
|
||||
"@fortawesome/free-solid-svg-icons": "^6.1.0",
|
||||
"@supercharge/request-ip": "^1.1.2",
|
||||
"@angular/animations": "^17.1.2",
|
||||
"@angular/cdk": "^17.1.2",
|
||||
"@angular/common": "^17.1.2",
|
||||
"@angular/compiler": "^17.1.2",
|
||||
"@angular/core": "^17.1.2",
|
||||
"@angular/forms": "^17.3.9",
|
||||
"@angular/material": "^17.3.9",
|
||||
"@angular/platform-browser": "^17.1.2",
|
||||
"@angular/platform-browser-dynamic": "^17.3.9",
|
||||
"@angular/router": "^17.3.9",
|
||||
"@fortawesome/angular-fontawesome": "^0.14.1",
|
||||
"@fortawesome/fontawesome-free": "^6.5.2",
|
||||
"@fortawesome/fontawesome-svg-core": "^6.5.2",
|
||||
"@fortawesome/free-brands-svg-icons": "^6.5.2",
|
||||
"@fortawesome/free-regular-svg-icons": "^6.5.2",
|
||||
"@fortawesome/free-solid-svg-icons": "^6.5.2",
|
||||
"@supercharge/request-ip": "^1.2.0",
|
||||
"angular-local-storage": "^0.7.1",
|
||||
"async": "^3.2.2",
|
||||
"angular-material-datepicker": "^1.0.2",
|
||||
"async": "^3.2.5",
|
||||
"coingecko-api": "^1.0.10",
|
||||
"easyqrcodejs": "^4.4.6",
|
||||
"easyqrcodejs": "^4.6.1",
|
||||
"hammerjs": "^2.0.8",
|
||||
"material-design-icons": "^3.0.1",
|
||||
"mongoose": "^6.0.13",
|
||||
"rxjs": "~6.6.0",
|
||||
"stdrpc": "^1.3.0",
|
||||
"tslib": "^2.3.0",
|
||||
"rxjs": "~7.8.0",
|
||||
"sha.js": "^2.4.11",
|
||||
"tslib": "^2.5.0",
|
||||
"urlsafe-base64": "^1.0.0",
|
||||
"uuid": "^8.3.2",
|
||||
"zone.js": "~0.11.4"
|
||||
"uuid": "^9.0.1",
|
||||
"zone.js": "^0.14.6"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@angular-devkit/build-angular": "^14.0.5",
|
||||
"@angular/cli": "^14.0.6",
|
||||
"@angular/compiler-cli": "^14.0.5",
|
||||
"@types/jasmine": "~3.8.0",
|
||||
"@types/node": "^12.20.33",
|
||||
"@types/urlsafe-base64": "^1.0.28",
|
||||
"@types/uuid": "^8.3.1",
|
||||
"jasmine-core": "~3.8.0",
|
||||
"karma": "~6.3.0",
|
||||
"karma-chrome-launcher": "~3.1.0",
|
||||
"karma-coverage": "~2.0.3",
|
||||
"karma-jasmine": "~4.0.0",
|
||||
"karma-jasmine-html-reporter": "~1.7.0",
|
||||
"typescript": "~4.7.4"
|
||||
"@angular-devkit/build-angular": "^17.3.7",
|
||||
"@angular/cli": "^17.3.7",
|
||||
"@angular/compiler-cli": "^17.3.9",
|
||||
"@types/jasmine": "~4.3.1",
|
||||
"@types/node": "^18.19.33",
|
||||
"@types/request": "^2.48.12",
|
||||
"@types/urlsafe-base64": "^1.0.31",
|
||||
"@types/uuid": "^9.0.8",
|
||||
"jasmine-core": "~4.5.0",
|
||||
"karma": "~6.4.2",
|
||||
"karma-chrome-launcher": "~3.1.1",
|
||||
"karma-coverage": "~2.2.0",
|
||||
"karma-jasmine": "~5.1.0",
|
||||
"karma-jasmine-html-reporter": "~2.0.0",
|
||||
"typescript": "~5.3.3"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,6 +9,7 @@ import { ListOrdersComponent } from './listorders/listorders.component';
|
|||
import { AuthGuardService } from './auth-guard.service';
|
||||
import { NodeResolverService } from './node-resolver.service';
|
||||
import { PmtserviceComponent } from './pmtservice/pmtservice.component';
|
||||
import { XeroRegComponent } from './xeroreg/xeroreg.component';
|
||||
|
||||
const routes: Routes = [
|
||||
{ path: '', component: LoginComponent, resolve: { response: NodeResolverService} },
|
||||
|
@ -19,6 +20,7 @@ const routes: Routes = [
|
|||
{ path: 'receipt/:orderId', component: ReceiptComponent},
|
||||
{ path: 'invoice/:orderId', component: InvoiceComponent},
|
||||
{ path: 'pmtservice', component: PmtserviceComponent},
|
||||
{ path: 'xeroauth', component: XeroRegComponent},
|
||||
{ path: 'login', component: LoginComponent, resolve: { response: NodeResolverService}}
|
||||
];
|
||||
|
||||
|
|
|
@ -8,5 +8,6 @@ main{
|
|||
}
|
||||
|
||||
.tiny{
|
||||
font-size: 10px;
|
||||
font-size: 12px;
|
||||
margin-top: 3px;
|
||||
}
|
||||
|
|
|
@ -1,8 +1,52 @@
|
|||
<main>
|
||||
<router-outlet></router-outlet>
|
||||
<main >
|
||||
<router-outlet ></router-outlet>
|
||||
<!--
|
||||
<app-login (newLanguageEvent) = "chgUILanguage($event)"></app-login>
|
||||
-->
|
||||
</main>
|
||||
<mat-divider></mat-divider>
|
||||
<div class="footer" align="center">
|
||||
<p>© 2022 Vergara Technologies LLC</p>
|
||||
<p class="tiny">Price data provided by CoinGecko API</p>
|
||||
<div align="center">
|
||||
<img *ngIf="zgoLanguage == 'en-US'"
|
||||
src="../assets/zgo-usa-flag-default.png"
|
||||
(click)="usFlagClicked()"
|
||||
height="24px"
|
||||
title="English (Default)"/>
|
||||
<img *ngIf="zgoLanguage != 'en-US'"
|
||||
src="../assets/zgo-usa-flag.png"
|
||||
(click)="usFlagClicked()"
|
||||
height="24px"
|
||||
title="English"/>
|
||||
<img src="../assets/flag-spacer.png"
|
||||
height="24px">
|
||||
<img *ngIf="zgoLanguage == 'es-US'"
|
||||
src="../assets/zgo-spain-flag-default.png"
|
||||
(click)="esFlagClicked()"
|
||||
height="24px"
|
||||
title="Spanish (Default)"/>
|
||||
<img *ngIf="zgoLanguage != 'es-US'"
|
||||
src="../assets/zgo-spain-flag.png"
|
||||
(click)="esFlagClicked()"
|
||||
height="24px"
|
||||
title="Spanish"/>
|
||||
<img src="../assets/flag-spacer.png"
|
||||
height="24px">
|
||||
<img *ngIf="zgoLanguage == 'br-US'"
|
||||
src="../assets/zgo-brazil-flag-default.png"
|
||||
(click)="brFlagClicked()"
|
||||
height="24px"
|
||||
title="Portuguese (Default)"/>
|
||||
<img *ngIf="zgoLanguage != 'br-US'"
|
||||
src="../assets/zgo-brazil-flag.png"
|
||||
(click)="brFlagClicked()"
|
||||
height="24px"
|
||||
title="Portuguese"/>
|
||||
</div>
|
||||
<div class="footer" align="center"
|
||||
style="margin-top: 10px;
|
||||
margin-bottom: 20px;">
|
||||
<div >© 2024 Vergara Technologies LLC</div>
|
||||
<div class="tiny">Version 2.4.1</div>
|
||||
<div class="tiny">{{ vE.mainPriceData }}</div>
|
||||
</div>
|
||||
<div></div>
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import { Component } from '@angular/core';
|
||||
//import { Post} from './posts/post.model';
|
||||
import { Component, OnInit } from '@angular/core';
|
||||
import { LanguageService } from './language.service';
|
||||
|
||||
|
||||
@Component({
|
||||
selector: 'app-root',
|
||||
|
@ -8,6 +9,56 @@ import { Component } from '@angular/core';
|
|||
})
|
||||
|
||||
export class AppComponent {
|
||||
title = 'ZGo';
|
||||
|
||||
title = 'ZGo';
|
||||
|
||||
zgoLanguage:string = '';
|
||||
vE = {
|
||||
mainPriceData : ''
|
||||
}
|
||||
|
||||
constructor(
|
||||
private languageService: LanguageService){
|
||||
}
|
||||
|
||||
ngOnInit(){
|
||||
//console.log('chgUILanguage() called on ngOnInit ');
|
||||
this.chgUILanguage();
|
||||
}
|
||||
|
||||
chgUILanguage() {
|
||||
//console.log('MAIN.chgUILanguage Called ');
|
||||
this.languageService.getViewElements('main').subscribe({
|
||||
next: response => {
|
||||
//console.log('response >> ', response );
|
||||
//console.log('main_price_data -> ',response.data.main_price_data);
|
||||
this.vE.mainPriceData = response.data.main_price_data;
|
||||
this.zgoLanguage = response.language;
|
||||
},
|
||||
error: error => { console.log('Error --> ',error); }
|
||||
});
|
||||
}
|
||||
|
||||
usFlagClicked() {
|
||||
if ( this.zgoLanguage != 'en-US' ) {
|
||||
localStorage.setItem('zgo_language','en-US');
|
||||
window.location.reload();
|
||||
}
|
||||
}
|
||||
|
||||
esFlagClicked() {
|
||||
if ( this.zgoLanguage != 'es-US' ) {
|
||||
localStorage.setItem('zgo_language','es-US');
|
||||
window.location.reload();
|
||||
}
|
||||
}
|
||||
|
||||
brFlagClicked() {
|
||||
if ( this.zgoLanguage != 'br-US' ) {
|
||||
localStorage.setItem('zgo_language','br-US');
|
||||
window.location.reload();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { NgModule } from '@angular/core';
|
||||
import { BrowserModule } from '@angular/platform-browser';
|
||||
import { BrowserModule, } from '@angular/platform-browser';
|
||||
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
||||
import { MatInputModule } from '@angular/material/input';
|
||||
import { MatAutocompleteModule } from '@angular/material/autocomplete';
|
||||
|
@ -17,6 +17,9 @@ import { MatProgressBarModule } from '@angular/material/progress-bar';
|
|||
import { MatStepperModule } from '@angular/material/stepper';
|
||||
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
|
||||
import { MatSnackBarModule } from '@angular/material/snack-bar';
|
||||
import { MatTabsModule } from '@angular/material/tabs';
|
||||
import { MatDatepickerModule } from '@angular/material/datepicker';
|
||||
import { MatNativeDateModule } from '@angular/material/core';
|
||||
|
||||
import { AppRoutingModule } from './app-routing.module';
|
||||
import { AppComponent } from './app.component';
|
||||
|
@ -46,6 +49,10 @@ import { PromptInvoiceComponent } from './prompt-invoice/prompt-invoice.componen
|
|||
import { PromptReceiptComponent } from './prompt-receipt/prompt-receipt.component';
|
||||
import { NotifierComponent } from './notifier/notifier.component';
|
||||
import { PmtserviceComponent } from './pmtservice/pmtservice.component';
|
||||
import { XeroRegComponent } from './xeroreg/xeroreg.component';
|
||||
import { DbExportComponent } from './db-export/db-export.component';
|
||||
import { SessionpayComponent } from './sessionpay/sessionpay.component';
|
||||
import { TipsComponent } from './tips/tips.component';
|
||||
|
||||
@NgModule({
|
||||
declarations: [
|
||||
|
@ -73,10 +80,14 @@ import { PmtserviceComponent } from './pmtservice/pmtservice.component';
|
|||
PromptInvoiceComponent,
|
||||
PromptReceiptComponent,
|
||||
NotifierComponent,
|
||||
PmtserviceComponent
|
||||
PmtserviceComponent,
|
||||
XeroRegComponent,
|
||||
DbExportComponent,
|
||||
SessionpayComponent,
|
||||
TipsComponent,
|
||||
],
|
||||
imports: [
|
||||
BrowserModule,
|
||||
BrowserAnimationsModule,
|
||||
AppRoutingModule,
|
||||
FormsModule,
|
||||
ReactiveFormsModule,
|
||||
|
@ -96,13 +107,17 @@ import { PmtserviceComponent } from './pmtservice/pmtservice.component';
|
|||
MatAutocompleteModule,
|
||||
MatSlideToggleModule,
|
||||
MatSnackBarModule,
|
||||
BrowserAnimationsModule,
|
||||
MatTabsModule,
|
||||
MatDatepickerModule,
|
||||
MatNativeDateModule,
|
||||
BrowserModule,
|
||||
FontAwesomeModule
|
||||
],
|
||||
exports: [
|
||||
MatIconModule
|
||||
],
|
||||
providers: [],
|
||||
providers: [
|
||||
],
|
||||
bootstrap: [AppComponent]
|
||||
})
|
||||
export class AppModule { }
|
||||
|
|
|
@ -1,57 +1,51 @@
|
|||
import { Injectable } from '@angular/core';
|
||||
import { CanActivate, Router, RouterStateSnapshot, ActivatedRouteSnapshot } from '@angular/router';
|
||||
import { Router, RouterStateSnapshot, ActivatedRouteSnapshot } from '@angular/router';
|
||||
import {HttpClient, HttpParams} from '@angular/common/http';
|
||||
import { UserService } from './user.service';
|
||||
import { Subscription, Observable } from 'rxjs';
|
||||
import { Owner } from './owner.model';
|
||||
import { Observable } from 'rxjs';
|
||||
|
||||
|
||||
@Injectable()
|
||||
|
||||
export class AuthGuardService implements CanActivate {
|
||||
private UserSub: Subscription = new Subscription();
|
||||
export class AuthGuardService {
|
||||
private addr = '';
|
||||
private paid = false;
|
||||
private paidUpdate: Observable<boolean>;
|
||||
constructor(
|
||||
private router: Router,
|
||||
private http: HttpClient,
|
||||
public userService: UserService
|
||||
){
|
||||
this.userService.findUser();
|
||||
this.paidUpdate = this.userService.paidUpdate;
|
||||
this.paidUpdate.subscribe((indicator) => {
|
||||
this.paid = indicator;
|
||||
});
|
||||
}
|
||||
|
||||
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
|
||||
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
|
||||
const token = localStorage.getItem('s4z_token');
|
||||
|
||||
var path = route.url[0].path;
|
||||
|
||||
if(token != null){
|
||||
this.userService.uZaddrUpdate.
|
||||
subscribe((addr) => {
|
||||
if (addr != null) {
|
||||
console.log(addr);
|
||||
this.addr = addr;
|
||||
} else {
|
||||
console.log("No record for that token");
|
||||
}
|
||||
});
|
||||
if (path === 'biz') {
|
||||
if (this.addr.length > 0) {
|
||||
return true;
|
||||
} else {
|
||||
this.router.navigate(['/login']);
|
||||
return false;
|
||||
}
|
||||
this.userService.checkUser()?.subscribe( response => {
|
||||
if (response.status == 200 && response.body?.validated) {
|
||||
return true;
|
||||
} else {
|
||||
this.router.navigate(['/login']);
|
||||
return false;
|
||||
}
|
||||
});
|
||||
} else {
|
||||
if (this.addr != null && this.paid) {
|
||||
return true;
|
||||
} else {
|
||||
this.router.navigate(['/login']);
|
||||
return false;
|
||||
}
|
||||
this.userService.checkUser()?.subscribe( response => {
|
||||
if (response.status == 200 && response.body?.validated && this.paid) {
|
||||
return true;
|
||||
} else {
|
||||
this.router.navigate(['/login']);
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
} else {
|
||||
console.log("Not logged in");
|
||||
|
|
|
@ -13,6 +13,11 @@ mat-card.centercard{
|
|||
font-family: 'Spartan', sans-serif;
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
::ng-deep .mat-vertical-stepper-header{
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
a.link{
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
|
|
@ -1,43 +1,43 @@
|
|||
<app-header></app-header>
|
||||
<div align="center">
|
||||
<mat-card class="centercard">
|
||||
<h3>Business sign-up</h3>
|
||||
<mat-vertical-stepper #stepper linear>
|
||||
<mat-step label="Provide business info" editable="false">
|
||||
<p>We do not have a business associated with this Zcash address, please enter your information below:</p>
|
||||
<h3>{{ vE.businessSignupTitle }}</h3>
|
||||
<mat-vertical-stepper #stepper [linear]="true">
|
||||
<mat-step label="{{ vE.businessBizInfo }}" editable="false">
|
||||
<p>{{ vE.businessAddrsNobiz }}</p>
|
||||
<mat-card [formGroup]="bizForm">
|
||||
<mat-form-field appearance="outline" [style.width.px]=300>
|
||||
<mat-label>Business Name</mat-label>
|
||||
<input matInput placeholder="Business Name" formControlName="name">
|
||||
<mat-label>{{ vE.businessBizNamelbl }}</mat-label>
|
||||
<input matInput placeholder="{{ vE.businessBizNameholder }}" formControlName="name">
|
||||
</mat-form-field>
|
||||
<br>
|
||||
<mat-form-field appearance="outline">
|
||||
<mat-label>Contact First Name</mat-label>
|
||||
<input matInput placeholder="First Name" formControlName="first">
|
||||
<mat-label>{{ vE.businessContactFnamelbl }}</mat-label>
|
||||
<input matInput placeholder="{{ vE.businessContactFnholder }}" formControlName="first">
|
||||
</mat-form-field>
|
||||
<mat-form-field appearance="outline">
|
||||
<mat-label>Contact Last Name</mat-label>
|
||||
<input matInput placeholder="Last Name" formControlName="last">
|
||||
<mat-label>{{ vE.businessContactLnamelbl }}</mat-label>
|
||||
<input matInput placeholder="{{ vE.businessContactLnholder }}" formControlName="last">
|
||||
</mat-form-field>
|
||||
<mat-form-field appearance="outline">
|
||||
<mat-label>Address</mat-label>
|
||||
<input matInput placeholder="Address" formControlName="street">
|
||||
<mat-label>{{ vE.businessBizAddresslbl }}</mat-label>
|
||||
<input matInput placeholder="{{ vE.businessBizAddressholder }}" formControlName="street">
|
||||
</mat-form-field>
|
||||
<mat-form-field appearance="outline">
|
||||
<mat-label>City</mat-label>
|
||||
<input matInput placeholder="City" formControlName="city">
|
||||
<mat-label>{{ vE.businessBizCitylbl }}</mat-label>
|
||||
<input matInput placeholder="{{ vE.businessBizCityholder }}" formControlName="city">
|
||||
</mat-form-field>
|
||||
<mat-form-field appearance="outline">
|
||||
<mat-label>State/Province</mat-label>
|
||||
<input matInput placeholder="State or Province" formControlName="state">
|
||||
<mat-label>{{ vE.businessBizStatelbl }}</mat-label>
|
||||
<input matInput placeholder="{{ vE.businessBizStateholder }}" formControlName="state">
|
||||
</mat-form-field>
|
||||
<mat-form-field appearance="outline">
|
||||
<mat-label>Postal Code</mat-label>
|
||||
<input matInput placeholder="Postal Code" formControlName="postal">
|
||||
<mat-label>{{ vE.businessBizPcodelbl }}</mat-label>
|
||||
<input matInput placeholder="{{ vE.businessBizPcodeholder }}" formControlName="postal">
|
||||
</mat-form-field>
|
||||
<mat-form-field appearance="outline">
|
||||
<mat-label>Country</mat-label>
|
||||
<input matInput placeholder="Country" formControlName="country" [matAutocomplete]="auto">
|
||||
<mat-label>{{ vE.businessBizCountrylbl }}</mat-label>
|
||||
<input matInput placeholder="{{ vE.businessBizCountryholder }}" formControlName="country" [matAutocomplete]="auto">
|
||||
<mat-autocomplete #auto="matAutocomplete">
|
||||
<mat-option *ngFor="let ctry of countries | searchOptions:bizForm.get('country')!.value" [value]="ctry.name">
|
||||
{{ctry.name}}
|
||||
|
@ -45,27 +45,27 @@
|
|||
</mat-autocomplete>
|
||||
</mat-form-field>
|
||||
<mat-form-field appearance="outline">
|
||||
<mat-label>E-mail</mat-label>
|
||||
<input matInput type="email" placeholder="E-mail" formControlName="email">
|
||||
<mat-label>{{ vE.businessBizMaillbl }}</mat-label>
|
||||
<input matInput type="email" placeholder="{{ vE.businessBizMailholder }}" formControlName="email">
|
||||
</mat-form-field>
|
||||
<mat-form-field appearance="outline">
|
||||
<mat-label>Website</mat-label>
|
||||
<input matInput placeholder="Website" formControlName="website">
|
||||
<mat-label>{{ vE.businessBizWebsitelbl }}</mat-label>
|
||||
<input matInput placeholder="{{ vE.businessBizWebsiteholder }}" formControlName="website">
|
||||
</mat-form-field>
|
||||
<mat-slide-toggle (change)="onChange($event)">
|
||||
I accept the <a class="link" (click)="showTerms()">Terms of Use</a>
|
||||
{{ vE.businessAcceptTerms }} <a class="link" (click)="showTerms()">{{ vE.businessTermsOfuse }}</a>
|
||||
</mat-slide-toggle>
|
||||
<mat-card-actions>
|
||||
<button mat-raised-button color="primary" [disabled]="bizForm.invalid || !termsChecked" (click)="save()">Save</button>
|
||||
<button mat-raised-button color="primary" [disabled]="bizForm.invalid || !termsChecked" (click)="save()">{{ vE.businessSaveBtn }}</button>
|
||||
</mat-card-actions>
|
||||
</mat-card>
|
||||
|
||||
</mat-step>
|
||||
<mat-step label="Select your session" editable="false">
|
||||
<p>Please select the length of session that you need:</p>
|
||||
<mat-step label="{{ vE.businessSessionLengthlbl }}" editable="false">
|
||||
<p>{{ vE.businessSelectSession }}</p>
|
||||
<mat-card [formGroup]="payForm">
|
||||
<mat-form-field appearance="outline">
|
||||
<mat-label>Session</mat-label>
|
||||
<mat-label>{{ vE.businessSessionLabel }}</mat-label>
|
||||
<mat-select formControlName="session">
|
||||
<mat-option *ngFor="let ticket of tickets" [value]="ticket.value">
|
||||
{{ticket.viewValue}}
|
||||
|
@ -73,11 +73,11 @@
|
|||
</mat-select>
|
||||
</mat-form-field>
|
||||
<mat-card-actions>
|
||||
<button mat-raised-button color="primary" [disabled]="payForm.invalid" (click)="pay()">Pay</button>
|
||||
<button mat-raised-button color="primary" [disabled]="payForm.invalid" (click)="pay()">{{ vE.businessSessionPaylbl }}</button>
|
||||
</mat-card-actions>
|
||||
</mat-card>
|
||||
</mat-step>
|
||||
<mat-step label="ZGo confirms your payment" editable="false">
|
||||
<mat-step label="{{ vE.businessZGoConfirmlbl }}" editable="false">
|
||||
<p>{{barMessage}}</p>
|
||||
<mat-progress-bar
|
||||
[mode]="barMode"
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
import { Component, OnInit, ViewChild, AfterViewInit } from '@angular/core';
|
||||
import { UntypedFormBuilder, Validators, UntypedFormGroup, FormControl } from '@angular/forms';
|
||||
import { Component, OnInit, ViewChild } from '@angular/core';
|
||||
import { UntypedFormBuilder, Validators, UntypedFormGroup } from '@angular/forms';
|
||||
import { MatDialog, MatDialogConfig} from '@angular/material/dialog';
|
||||
import { ProgressBarMode } from '@angular/material/progress-bar';
|
||||
import { Router } from '@angular/router';
|
||||
import { Observable } from 'rxjs';
|
||||
import { filter, startWith, map, switchMap } from 'rxjs/operators';
|
||||
import { MatStepper } from '@angular/material/stepper';
|
||||
import { MatSlideToggleChange } from '@angular/material/slide-toggle';
|
||||
import { Country } from '../country.model';
|
||||
|
@ -12,10 +11,11 @@ import { Owner } from '../owner.model';
|
|||
import { User } from '../user.model';
|
||||
import { UserService } from '../user.service';
|
||||
import { FullnodeService } from '../fullnode.service';
|
||||
import { SearchOptionsPipe } from '../searchoptions.pipe';
|
||||
import { ScanComponent } from '../scan/scan.component';
|
||||
import { TermsComponent } from '../terms/terms.component';
|
||||
|
||||
import { LanguageService } from '../language.service';
|
||||
|
||||
@Component({
|
||||
selector: 'app-business',
|
||||
templateUrl: './business.component.html',
|
||||
|
@ -26,16 +26,20 @@ export class BusinessComponent implements OnInit {
|
|||
@ViewChild('stepper', { static: false}) stepper: MatStepper|undefined;
|
||||
intervalHolder: any;
|
||||
nodeAddress: string = '';
|
||||
zecPrice: number = 1;
|
||||
tickets = [
|
||||
{
|
||||
value: 0.005,
|
||||
viewValue: '1 day: 0.005 ZEC'
|
||||
value: 1,
|
||||
viewValue: '1 day: USD $1'
|
||||
},{
|
||||
value: 0.025,
|
||||
viewValue: '1 week: 0.025 ZEC'
|
||||
value: 6,
|
||||
viewValue: '1 week: USD $6'
|
||||
},{
|
||||
value: 0.1,
|
||||
viewValue: '1 month: 0.1 ZEC'
|
||||
value: 22,
|
||||
viewValue: '1 month: USD $22'
|
||||
},{
|
||||
value: 30,
|
||||
viewValue: '1 month Pro: USD $30'
|
||||
}
|
||||
];
|
||||
bizForm: UntypedFormGroup;
|
||||
|
@ -46,15 +50,33 @@ export class BusinessComponent implements OnInit {
|
|||
countries: Country[] = [];
|
||||
owner: Owner = {
|
||||
address: '',
|
||||
name: '',
|
||||
currency: 'usd',
|
||||
tax: false,
|
||||
taxValue: 0,
|
||||
vat: false,
|
||||
vatValue: 0,
|
||||
phone: '',
|
||||
paid: false,
|
||||
zats: false,
|
||||
invoices: false,
|
||||
expiration: new Date(Date.now()).toISOString(),
|
||||
payconf: false,
|
||||
crmToken: '',
|
||||
viewkey: '',
|
||||
tips: false
|
||||
}
|
||||
public countriesUpdate: Observable<Country[]>;
|
||||
public ownerUpdate: Observable<Owner>;
|
||||
public addrUpdate: Observable<string>;
|
||||
public userUpdate: Observable<User>;
|
||||
public priceUpdate: Observable<number>;
|
||||
sessionId = '';
|
||||
ownerKnown = false;
|
||||
termsChecked = false;
|
||||
ownerdata = {
|
||||
first: '',
|
||||
last: '',
|
||||
phone: '',
|
||||
name: '',
|
||||
street: '',
|
||||
city: '',
|
||||
|
@ -63,27 +85,60 @@ export class BusinessComponent implements OnInit {
|
|||
country: '',
|
||||
email: '',
|
||||
website: '',
|
||||
zats: false,
|
||||
invoices: false,
|
||||
expiration: new Date(Date.now()).toISOString(),
|
||||
payconf: false,
|
||||
viewkey: ''
|
||||
}
|
||||
public countriesUpdate: Observable<Country[]>;
|
||||
public ownerUpdate: Observable<Owner>;
|
||||
public addrUpdate: Observable<string>;
|
||||
public userUpdate: Observable<User>;
|
||||
sessionId = '';
|
||||
ownerKnown = false;
|
||||
termsChecked = false;
|
||||
payconf: false
|
||||
};
|
||||
// -------------------------------------
|
||||
//
|
||||
// Language Support
|
||||
//
|
||||
vE = {
|
||||
businessSignupTitle : '',
|
||||
businessBizInfo : '',
|
||||
businessAddrsNobiz : '',
|
||||
businessBizNamelbl : '',
|
||||
businessBizNameholder : '',
|
||||
businessContactFnamelbl : '',
|
||||
businessContactFnholder : '',
|
||||
businessContactLnamelbl : '',
|
||||
businessContactLnholder : '',
|
||||
businessBizAddresslbl : '',
|
||||
businessBizAddressholder : '',
|
||||
businessBizCitylbl : '',
|
||||
businessBizCityholder : '',
|
||||
businessBizStatelbl : '',
|
||||
businessBizStateholder : '',
|
||||
businessBizPcodelbl : '',
|
||||
businessBizPcodeholder : '',
|
||||
businessBizCountrylbl : '',
|
||||
businessBizCountryholder : '',
|
||||
businessBizMaillbl : '',
|
||||
businessBizMailholder : '',
|
||||
businessBizWebsitelbl : '',
|
||||
businessBizWebsiteholder : '',
|
||||
businessAcceptTerms : '',
|
||||
businessTermsOfuse : '',
|
||||
businessSaveBtn : '',
|
||||
businessSessionLengthlbl : '',
|
||||
businessSelectSession : '',
|
||||
businessSessionLabel : '',
|
||||
businessSessionPaylbl : '',
|
||||
businessZGoConfirmlbl : ''
|
||||
|
||||
};
|
||||
//
|
||||
//
|
||||
constructor(
|
||||
private languageService : LanguageService,
|
||||
private fb: UntypedFormBuilder,
|
||||
private userService: UserService,
|
||||
private fullnodeService: FullnodeService,
|
||||
private dialog: MatDialog,
|
||||
private router: Router
|
||||
) {
|
||||
this.priceUpdate = fullnodeService.priceUpdate;
|
||||
this.priceUpdate.subscribe(priceInfo => {
|
||||
this.zecPrice = priceInfo;
|
||||
});
|
||||
this.countriesUpdate = userService.countriesUpdate;
|
||||
this.ownerUpdate = userService.ownerUpdate;
|
||||
this.userUpdate = userService.userUpdate;
|
||||
|
@ -120,6 +175,7 @@ export class BusinessComponent implements OnInit {
|
|||
}
|
||||
|
||||
ngOnInit(): void {
|
||||
this.chgUILanguage();
|
||||
this.intervalHolder = setInterval(() => {
|
||||
this.loginCheck();
|
||||
}, 1000 * 60);
|
||||
|
@ -135,7 +191,7 @@ export class BusinessComponent implements OnInit {
|
|||
}
|
||||
|
||||
onChange(ob: MatSlideToggleChange){
|
||||
console.log(ob.checked);
|
||||
//console.log(ob.checked);
|
||||
this.termsChecked = ob.checked;
|
||||
}
|
||||
|
||||
|
@ -144,25 +200,17 @@ export class BusinessComponent implements OnInit {
|
|||
dialogConfig.disableClose = true;
|
||||
dialogConfig.autoFocus = true;
|
||||
|
||||
const dialogRef = this.dialog.open(TermsComponent, dialogConfig);
|
||||
dialogRef.afterClosed().subscribe(val => {
|
||||
console.log('Terms read');
|
||||
});
|
||||
this.dialog.open(TermsComponent, dialogConfig);
|
||||
//dialogRef.afterClosed().subscribe(val => {
|
||||
//console.log('Terms read');
|
||||
//});
|
||||
}
|
||||
|
||||
save() {
|
||||
this.owner = {
|
||||
_id: '',
|
||||
address: '',
|
||||
currency: 'usd',
|
||||
tax: false,
|
||||
taxValue: 0,
|
||||
vat: false,
|
||||
vatValue: 0,
|
||||
this.ownerdata = {
|
||||
first: this.bizForm.get('first')!.value,
|
||||
last: this.bizForm.get('last')!.value,
|
||||
phone: '',
|
||||
paid: false,
|
||||
name: this.bizForm.get('name')!.value,
|
||||
street: this.bizForm.get('street')!.value,
|
||||
city: this.bizForm.get('city')!.value,
|
||||
|
@ -171,13 +219,9 @@ export class BusinessComponent implements OnInit {
|
|||
country: this.bizForm.get('country')!.value,
|
||||
email: this.bizForm.get('email')!.value,
|
||||
website: this.bizForm.get('website')!.value,
|
||||
zats: false,
|
||||
invoices: false,
|
||||
expiration: new Date(Date.now()).toISOString(),
|
||||
payconf: false,
|
||||
viewkey: ''
|
||||
payconf: false
|
||||
};
|
||||
this.userService.addOwner(this.owner);
|
||||
this.userService.addOwner(this.ownerdata);
|
||||
this.stepper!.next();
|
||||
}
|
||||
|
||||
|
@ -187,7 +231,7 @@ export class BusinessComponent implements OnInit {
|
|||
dialogConfig.disableClose = true;
|
||||
dialogConfig.autoFocus = true;
|
||||
dialogConfig.data = {
|
||||
totalZec: this.payForm.get('session')!.value,
|
||||
totalZec: (this.payForm.get('session')!.value)/this.zecPrice,
|
||||
addr: this.nodeAddress,
|
||||
session: this.sessionId,
|
||||
pay: true
|
||||
|
@ -195,7 +239,7 @@ export class BusinessComponent implements OnInit {
|
|||
|
||||
const dialogRef = this.dialog.open(ScanComponent, dialogConfig);
|
||||
dialogRef.afterClosed().subscribe(val => {
|
||||
console.log('Awaiting payment');
|
||||
//console.log('Awaiting payment');
|
||||
if(val){
|
||||
this.stepper!.next();
|
||||
}
|
||||
|
@ -212,4 +256,51 @@ export class BusinessComponent implements OnInit {
|
|||
});
|
||||
}
|
||||
|
||||
chgUILanguage(){
|
||||
//console.log('BUSINESS.chgUILanguage Called ');
|
||||
this.languageService.getViewElements('business').subscribe(
|
||||
response => {
|
||||
//console.log('Received >> ', response );
|
||||
//console.log('Language Code : ', response.language);
|
||||
//console.log('Component Name : ',response.component);
|
||||
//console.log('Language data : ',response.data);
|
||||
|
||||
this.vE.businessSignupTitle = response.data.business_signup_title;
|
||||
this.vE.businessBizInfo = response.data.business_biz_info;
|
||||
this.vE.businessAddrsNobiz = response.data.business_addrs_nobiz;
|
||||
this.vE.businessBizNamelbl = response.data.business_biz_namelbl;
|
||||
this.vE.businessBizNameholder = response.data.business_biz_nameholder;
|
||||
this.vE.businessContactFnamelbl = response.data.business_contact_fnamelbl;
|
||||
this.vE.businessContactFnholder = response.data.business_contact_fnholder;
|
||||
this.vE.businessContactLnamelbl = response.data.business_contact_lnamelbl;
|
||||
this.vE.businessBizAddresslbl = response.data.business_biz_addresslbl;
|
||||
this.vE.businessBizAddressholder = response.data.business_biz_addressholder;
|
||||
this.vE.businessBizCitylbl = response.data.business_biz_citylbl;
|
||||
this.vE.businessBizCityholder = response.data.business_biz_cityholder;
|
||||
this.vE.businessBizStatelbl = response.data.business_biz_statelbl;
|
||||
this.vE.businessBizStateholder = response.data.business_biz_stateholder;
|
||||
this.vE.businessBizPcodelbl = response.data.business_biz_pcodelbl;
|
||||
this.vE.businessBizPcodeholder = response.data.business_biz_pcodeholder;
|
||||
this.vE.businessBizCitylbl = response.data.business_biz_citylbl;
|
||||
this.vE.businessBizCityholder = response.data.business_biz_cityholder;
|
||||
this.vE.businessBizCountrylbl = response.data.business_biz_countrylbl;
|
||||
this.vE.businessBizCountryholder = response.data.business_biz_countryholder;
|
||||
this.vE.businessBizMaillbl = response.data.business_biz_maillbl;
|
||||
this.vE.businessBizMailholder = response.data.business_biz_mailholder;
|
||||
this.vE.businessBizWebsitelbl = response.data.business_biz_websitelbl;
|
||||
this.vE.businessBizWebsiteholder = response.data.business_biz_websiteholder;
|
||||
this.vE.businessAcceptTerms = response.data.business_accept_terms;
|
||||
this.vE.businessTermsOfuse = response.data.business_terms_ofuse;
|
||||
this.vE.businessSaveBtn = response.data.business_save_btn;
|
||||
this.vE.businessSessionLengthlbl = response.data.business_session_lengthlbl;
|
||||
this.vE.businessSelectSession = response.data.business_select_session;
|
||||
this.vE.businessSessionLabel = response.data.business_session_label;
|
||||
this.vE.businessSessionPaylbl = response.data.business_session_paylbl;
|
||||
this.vE.businessZGoConfirmlbl = response.data.business_zgo_confirmlbl;
|
||||
|
||||
},
|
||||
error => { console.log('Error >> ',error); }
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,28 +1,33 @@
|
|||
<div class="container" style="margin-top: 10px;">
|
||||
|
||||
<div class="cancelTitle">{{title}}</div>
|
||||
|
||||
<mat-dialog-content>
|
||||
<p class="text">{{msg}}</p>
|
||||
<div class='cancelTitle'>{{title}}</div>
|
||||
<div class="container" >
|
||||
<mat-dialog-content
|
||||
style="font-family: 'Spartan', sans-serif;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-top: 20px;
|
||||
padding: 20px;">
|
||||
{{msg1}}<br>{{msg2}}
|
||||
</mat-dialog-content>
|
||||
|
||||
<mat-dialog-actions>
|
||||
<table cellspacing="0" width="100%">
|
||||
<tr>
|
||||
<td>
|
||||
<button mat-raised-button color="primary" (click)="confirm()">
|
||||
Yes
|
||||
</button>
|
||||
|
||||
</td>
|
||||
<td align="right">
|
||||
<button mat-raised-button (click)="close()">
|
||||
No
|
||||
</button>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</mat-dialog-actions>
|
||||
|
||||
<div style="font-family: 'Spartan', sans-serif;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-top: 20px;
|
||||
padding: 20px;">
|
||||
<button mat-raised-button
|
||||
style="background-color: #ff5722;
|
||||
font-family: 'Spartan', sans-serif;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
color : white;"
|
||||
(click)="confirm()">
|
||||
{{ vE.cancelConfirmBtn }}
|
||||
</button>
|
||||
<button mat-raised-button
|
||||
style="font-family: 'Spartan', sans-serif;
|
||||
font-size: 14px;
|
||||
font-weight: 600;"
|
||||
(click)="close()">
|
||||
{{ vE.cancelDismissBtn }}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
|
@ -1,6 +1,8 @@
|
|||
import { Inject, Component, OnInit, ViewEncapsulation} from '@angular/core';
|
||||
import { MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog';
|
||||
|
||||
import { LanguageService } from '../language.service';
|
||||
import { LanguageData } from '../language.model';
|
||||
|
||||
@Component({
|
||||
selector: 'app-cancel',
|
||||
|
@ -10,14 +12,31 @@ import { MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialo
|
|||
|
||||
export class CancelComponent {
|
||||
title: string;
|
||||
msg: string;
|
||||
|
||||
msg1: string;
|
||||
msg2: string;
|
||||
// -------------------------------------
|
||||
//
|
||||
// Language Support
|
||||
//
|
||||
vE = {
|
||||
cancelTitle : '',
|
||||
cancelConfirmBtn : '',
|
||||
cancelDismissBtn : ''
|
||||
}
|
||||
//
|
||||
// ------------------------------------------------------------
|
||||
constructor(
|
||||
private languageService : LanguageService,
|
||||
private dialogRef: MatDialogRef<CancelComponent>,
|
||||
@Inject(MAT_DIALOG_DATA) public data: { title: string, msg: string}
|
||||
@Inject(MAT_DIALOG_DATA) public data: { title: string, msg1: string, msg2: string;}
|
||||
) {
|
||||
this.title = data.title;
|
||||
this.msg = data.msg;
|
||||
this.msg1 = data.msg1;
|
||||
this.msg2 = data.msg2;
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
this.chgUILanguage();
|
||||
}
|
||||
|
||||
confirm() {
|
||||
|
@ -27,4 +46,22 @@ export class CancelComponent {
|
|||
close() {
|
||||
this.dialogRef.close(false);
|
||||
}
|
||||
|
||||
chgUILanguage(){
|
||||
console.log('CANCEL.chgUILanguage Called ');
|
||||
this.languageService.getViewElements('cancel').subscribe(
|
||||
response => {
|
||||
console.log('Received >> ', response );
|
||||
console.log('Language Code : ', response.language);
|
||||
console.log('Component Name : ',response.component);
|
||||
console.log('Language data : ',response.data);
|
||||
|
||||
this.vE.cancelTitle = response.data.cancel_title;
|
||||
this.vE.cancelConfirmBtn = response.data.cancel_confirm_btn;
|
||||
this.vE.cancelDismissBtn = response.data.cancel_dismiss_btn;
|
||||
},
|
||||
error => { console.log('Error >> ',error); }
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
<div class="container" style="font-family: 'Spartan', sans-serif;
|
||||
margin-top: 10px;">
|
||||
<div class="askPayment">
|
||||
{{ vE.checkoutScanPayment }}
|
||||
</div>
|
||||
|
||||
<div class="container" style="font-family: 'Spartan', sans-serif;
|
||||
padding: 15px;">
|
||||
|
||||
<div class="askPayment">
|
||||
Scan to make payment
|
||||
</div>
|
||||
<pre></pre>
|
||||
<table style="align-content: center;">
|
||||
<tr>
|
||||
|
@ -20,43 +21,43 @@
|
|||
width="100%">
|
||||
<tr>
|
||||
<td>
|
||||
<button mat-raised-button color="primary" (click)="confirm()">
|
||||
<mat-icon>verified_user</mat-icon>
|
||||
<button mat-raised-button color="primary" (click)="confirm()"><mat-icon>verified_user</mat-icon>
|
||||
{{ vE.checkoutAcceptBtn }}
|
||||
</button>
|
||||
|
||||
</td>
|
||||
<td align="right">
|
||||
<button mat-raised-button (click)="close()">
|
||||
<mat-icon>close</mat-icon>
|
||||
<mat-icon>close_btn</mat-icon>{{ vE.checkoutCloseBtn }}
|
||||
</button>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div style="text-align: center;
|
||||
margin-top: 10px;
|
||||
line-height: 30px;">
|
||||
|
||||
Can't scan?<br>Use this <a [href]="zcashUrl">wallet link</a>, or
|
||||
line-height: 30px;">{{ vE.checkoutCantScan }}<br>
|
||||
{{ vE.checkoutUseThis }}<a [href]="zcashUrl">{{ vE.checkoutWalletLink }}</a>{{ vE.checkoutWalletOr }}
|
||||
<div style="display: flex;
|
||||
justify-content: space-between;">
|
||||
<button style="margin-top: 20px;
|
||||
font-weight: 700;
|
||||
background-color: lightgray;"
|
||||
mat-raised-button
|
||||
(click)="copyAddress()">Copy Address</button>
|
||||
(click)="copyAddress()">{{ vE.checkoutCopyAddress }}</button>
|
||||
<button style="margin-top: 20px;
|
||||
font-weight: 700;
|
||||
background-color: lightgray;"
|
||||
mat-raised-button
|
||||
(click)="copyAmount()">Copy Amount</button>
|
||||
(click)="copyAmount()">{{ vE.checkoutCopyAmount }}</button>
|
||||
</div>
|
||||
<button style="margin-top: 20px;
|
||||
font-weight: 700;
|
||||
background-color: lightgray;"
|
||||
mat-raised-button
|
||||
(click)="copyMemo()">Copy Memo</button>
|
||||
(click)="copyMemo()">{{ vE.checkoutCopyMemo }}</button>
|
||||
|
||||
</div>
|
||||
|
||||
|
|
|
@ -4,6 +4,9 @@ import { DomSanitizer, SafeUrl } from '@angular/platform-browser';
|
|||
|
||||
import { NotifierService } from '../notifier.service';
|
||||
|
||||
import { LanguageService } from '../language.service';
|
||||
import { LanguageData } from '../language.model';
|
||||
|
||||
var QRCode = require('easyqrcodejs');
|
||||
var URLSafeBase64 = require('urlsafe-base64');
|
||||
var Buffer = require('buffer/').Buffer;
|
||||
|
@ -14,14 +17,38 @@ var Buffer = require('buffer/').Buffer;
|
|||
styleUrls: ['./checkout.component.css']
|
||||
})
|
||||
|
||||
export class CheckoutComponent implements OnInit{
|
||||
export class CheckoutComponent implements OnInit {
|
||||
address: string;
|
||||
total: number;
|
||||
orderId: string;
|
||||
codeString: string = '';
|
||||
zcashUrl: SafeUrl;
|
||||
|
||||
// -------------------------------------
|
||||
//
|
||||
// Language Support
|
||||
//
|
||||
vE = {
|
||||
checkoutScanPayment : '',
|
||||
checkoutAcceptBtn : '',
|
||||
checkoutCloseBtn : '',
|
||||
checkoutCantScan : '',
|
||||
checkoutUseThis : '',
|
||||
checkoutWalletLink : '',
|
||||
checkoutWalletOr : '',
|
||||
checkoutCopyAddress : '',
|
||||
checkoutCopyAmount : '',
|
||||
checkoutCopyMemo : '',
|
||||
checkoutCopyNotavail : '',
|
||||
checkoutNotservClose : '',
|
||||
checkoutNotservError : '',
|
||||
checkoutCopyaddressError : '',
|
||||
checkoutCopyamountError : '',
|
||||
checkoutCopymemoError : ''
|
||||
};
|
||||
//
|
||||
constructor(
|
||||
private languageService : LanguageService,
|
||||
private dialogRef: MatDialogRef<CheckoutComponent>,
|
||||
private sanitizer: DomSanitizer,
|
||||
@Inject(MAT_DIALOG_DATA) public data: { totalZec: number, addr: string, orderId: string},
|
||||
|
@ -47,7 +74,7 @@ export class CheckoutComponent implements OnInit{
|
|||
correctLevel: QRCode.CorrectLevel.H
|
||||
});
|
||||
console.log("mgOnInit - pasa");
|
||||
|
||||
this.chgUILanguage();
|
||||
}
|
||||
|
||||
confirm() {
|
||||
|
@ -62,27 +89,40 @@ export class CheckoutComponent implements OnInit{
|
|||
if (!navigator.clipboard) {
|
||||
// alert("Copy functionality not supported");
|
||||
this.notifierService
|
||||
.showNotification("Copy functionality not supported","Close","error");
|
||||
.showNotification(this.vE.checkoutCopyNotavail,
|
||||
this.vE.checkoutNotservClose,
|
||||
"error",
|
||||
this.vE.checkoutNotservError);
|
||||
}
|
||||
try {
|
||||
navigator.clipboard.writeText(this.address);
|
||||
} catch (err) {
|
||||
this.notifierService
|
||||
.showNotification("Error copying address","Close","error");
|
||||
.showNotification(this.vE.checkoutCopyaddressError,
|
||||
this.vE.checkoutNotservClose,
|
||||
"error",
|
||||
this.vE.checkoutNotservError);
|
||||
// console.error("Error", err);
|
||||
}
|
||||
}
|
||||
|
||||
copyAmount() {
|
||||
if (!navigator.clipboard) {
|
||||
// alert("Copy functionality not supported");
|
||||
this.notifierService
|
||||
.showNotification("Copy functionality not supported","Close","error");
|
||||
.showNotification(this.vE.checkoutCopyNotavail,
|
||||
this.vE.checkoutNotservClose,
|
||||
"error",
|
||||
this.vE.checkoutNotservError);
|
||||
}
|
||||
try {
|
||||
navigator.clipboard.writeText(this.total.toString());
|
||||
} catch (err) {
|
||||
this.notifierService
|
||||
.showNotification("Error while copying ammount","Close","error");
|
||||
.showNotification(this.vE.checkoutCopyamountError,
|
||||
this.vE.checkoutNotservClose,
|
||||
"error",
|
||||
this.vE.checkoutNotservError);
|
||||
// console.error("Error", err);
|
||||
}
|
||||
}
|
||||
|
@ -91,14 +131,51 @@ export class CheckoutComponent implements OnInit{
|
|||
if (!navigator.clipboard) {
|
||||
// alert("Copy functionality not supported");
|
||||
this.notifierService
|
||||
.showNotification("Copy functionality not supported","Close","error");
|
||||
.showNotification(this.vE.checkoutCopyNotavail,
|
||||
this.vE.checkoutNotservClose,
|
||||
"error",
|
||||
this.vE.checkoutNotservError);
|
||||
}
|
||||
try {
|
||||
navigator.clipboard.writeText("ZGo Order::" + this.orderId);
|
||||
} catch (err) {
|
||||
this.notifierService
|
||||
.showNotification("Error while copying Memo","Close","error");
|
||||
.showNotification(this.vE.checkoutCopymemoError,
|
||||
this.vE.checkoutNotservClose,
|
||||
"error",
|
||||
this.vE.checkoutNotservError);
|
||||
// console.error("Error", err);
|
||||
}
|
||||
}
|
||||
|
||||
chgUILanguage(){
|
||||
console.log('CHECKOUT.chgUILanguage Called ');
|
||||
this.languageService.getViewElements('checkout').subscribe(
|
||||
response => {
|
||||
console.log('Received >> ', response );
|
||||
console.log('Language Code : ', response.language);
|
||||
console.log('Component Name : ',response.component);
|
||||
console.log('Language data : ',response.data);
|
||||
|
||||
this.vE.checkoutScanPayment = response.data.checkout_scan_payment;
|
||||
this.vE.checkoutAcceptBtn = response.data.checkout_accept_btn;
|
||||
this.vE.checkoutCloseBtn = response.data.checkout_close_btn;
|
||||
this.vE.checkoutCantScan = response.data.checkout_cant_scan;
|
||||
this.vE.checkoutUseThis = response.data.checkout_use_this;
|
||||
this.vE.checkoutWalletLink = response.data.checkout_wallet_link;
|
||||
this.vE.checkoutWalletOr = response.data.checkout_wallet_or;
|
||||
this.vE.checkoutCopyAddress = response.data.checkout_copy_address;
|
||||
this.vE.checkoutCopyAmount = response.data.checkout_copy_amount;
|
||||
this.vE.checkoutCopyMemo = response.data.checkout_copy_memo;
|
||||
this.vE.checkoutCopyNotavail = response.data.checkout_copy_notavail;
|
||||
this.vE.checkoutNotservClose = response.data.checkout_notserv_close;
|
||||
this.vE.checkoutNotservError = response.data.checkout_notserv_error;
|
||||
this.vE.checkoutCopyaddressError = response.data.checkout_copyaddress_error;
|
||||
this.vE.checkoutCopyamountError = response.data.checkout_copyamount_error;
|
||||
this.vE.checkoutCopymemoError = response.data.checkout_copymemo_error;
|
||||
},
|
||||
error => { console.log('Error >> ',error); }
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
72
src/app/db-export/db-export.component.css
Normal file
72
src/app/db-export/db-export.component.css
Normal file
|
@ -0,0 +1,72 @@
|
|||
* {
|
||||
font-family: 'Spartan', sans-serif;
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
.daterangecard {
|
||||
padding: 30px;
|
||||
}
|
||||
|
||||
.description {
|
||||
margin-bottom: 20px;
|
||||
font-size: 14px;
|
||||
font-weight: 700;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.datepicker {
|
||||
border-color: dimgray;
|
||||
border-width: 3px;
|
||||
border-radius: 8px;
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
.noorders {
|
||||
font-size: 14px;
|
||||
font-weight: 700;
|
||||
text-align: center;
|
||||
padding-top: 20px;
|
||||
padding-bottom: 20px;
|
||||
border-color: dimgray;
|
||||
border-width: 3px;
|
||||
border-radius: 8px;
|
||||
background-color: #f9e79f;
|
||||
}
|
||||
|
||||
.settings-title {
|
||||
font-family: 'Spartan', sans-serif;
|
||||
background: #ff5722;
|
||||
color: white;
|
||||
font-size: 30px;
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.daterange {
|
||||
font-size: 13px;
|
||||
font-weight: 700;
|
||||
padding-bottom: 15px;
|
||||
}
|
||||
|
||||
.downloadbtn {
|
||||
min-width: 120px;
|
||||
max-width: 150px;
|
||||
height: 25px;
|
||||
border-color: dimgray;
|
||||
border-width: 3px;
|
||||
border-radius: 8px;
|
||||
box-shadow: lightgray;
|
||||
font-family: 'Spartan', sans-serif;
|
||||
background: #ff5722;
|
||||
color: white;
|
||||
font-size: 16px;
|
||||
text-align: center;
|
||||
padding: 6px;
|
||||
}
|
||||
|
||||
::ng-deep .downloadbtntxt {
|
||||
color: white;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
}
|
61
src/app/db-export/db-export.component.html
Normal file
61
src/app/db-export/db-export.component.html
Normal file
|
@ -0,0 +1,61 @@
|
|||
<div class="settings-title">{{ vE.dbexportSettingsTitle }}</div>
|
||||
<div class='daterangecard'>
|
||||
<div class='description'>
|
||||
{{ vE.dbexportExportDescrip }}
|
||||
</div>
|
||||
<div class="datepicker"
|
||||
*ngIf="ordersOk()">
|
||||
<mat-form-field appearance="fill">
|
||||
<!--
|
||||
<mat-label >Enter a date range</mat-label>
|
||||
-->
|
||||
<div class="daterange">{{ vE.dbexportDateRange }}</div>
|
||||
<mat-date-range-input [formGroup]="range" [rangePicker]="picker">
|
||||
<input matStartDate formControlName="start" placeholder="{{ vE.dbexportStartDate }}">
|
||||
<input matEndDate formControlName="end" placeholder="{{ vE.dbexportEndDate }}">
|
||||
</mat-date-range-input>
|
||||
<mat-hint>MM/DD/YYYY – MM/DD/YYYY</mat-hint>
|
||||
<mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
|
||||
<mat-date-range-picker #picker></mat-date-range-picker>
|
||||
|
||||
<mat-error *ngIf="range.controls.start.hasError('matStartDateInvalid')">{{ vE.dbexportInvalidStart }}</mat-error>
|
||||
<mat-error *ngIf="range.controls.end.hasError('matEndDateInvalid')">{{ vE.dbexportInvalidEnd }}</mat-error>
|
||||
</mat-form-field>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
</div>
|
||||
|
||||
<div class="noorders"
|
||||
*ngIf="!ordersOk()">
|
||||
<br>
|
||||
{{ vE.dbexportNoordersCreated }}
|
||||
<br>
|
||||
{{ vE.dbexportNothingTodo }}
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
</div>
|
||||
<br>
|
||||
<br>
|
||||
<div style="display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;">
|
||||
<button mat-raised-button
|
||||
style="background: #ff5722;
|
||||
color: white;
|
||||
font-weight: 700;"
|
||||
(click)="closedbExport()">
|
||||
{{ vE.dbexportBtnClose }}
|
||||
</button>
|
||||
|
||||
<a mat-raised-button *ngIf="checkReady()" color="primary" [href]="fileUrl"
|
||||
download="orders.csv">{{ vE.dbexportDownloadLink }}</a>
|
||||
|
||||
</div>
|
||||
<!--
|
||||
<div style="height: 20px;
|
||||
margin-top: 10px;">
|
||||
</div>
|
||||
-->
|
||||
</div>
|
23
src/app/db-export/db-export.component.spec.ts
Normal file
23
src/app/db-export/db-export.component.spec.ts
Normal file
|
@ -0,0 +1,23 @@
|
|||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { DbExportComponent } from './db-export.component';
|
||||
|
||||
describe('DbExportComponent', () => {
|
||||
let component: DbExportComponent;
|
||||
let fixture: ComponentFixture<DbExportComponent>;
|
||||
|
||||
beforeEach(async () => {
|
||||
await TestBed.configureTestingModule({
|
||||
declarations: [ DbExportComponent ]
|
||||
})
|
||||
.compileComponents();
|
||||
|
||||
fixture = TestBed.createComponent(DbExportComponent);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
it('should create', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
});
|
194
src/app/db-export/db-export.component.ts
Normal file
194
src/app/db-export/db-export.component.ts
Normal file
|
@ -0,0 +1,194 @@
|
|||
import { Component, OnInit } from '@angular/core';
|
||||
import { FormGroup, FormControl } from '@angular/forms';
|
||||
import { DomSanitizer } from '@angular/platform-browser';
|
||||
import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
|
||||
|
||||
import { Observable } from 'rxjs';
|
||||
import { Order } from '../order/order.model';
|
||||
import { FullnodeService } from '../fullnode.service';
|
||||
import { UserService } from '../user.service';
|
||||
import { Owner } from '../owner.model';
|
||||
import { OrderService } from '../order/order.service';
|
||||
|
||||
import { LanguageService } from '../language.service';
|
||||
import { LanguageData } from '../language.model';
|
||||
|
||||
@Component({
|
||||
selector: 'app-db-export',
|
||||
templateUrl: './db-export.component.html',
|
||||
styleUrls: ['./db-export.component.css']
|
||||
})
|
||||
|
||||
export class DbExportComponent implements OnInit {
|
||||
|
||||
public orders: Order[] = [];
|
||||
public ownerUpdate: Observable<Owner>;
|
||||
public ordersUpdate: Observable<Order[]>;
|
||||
fileUrl : any;
|
||||
owner : Owner = {
|
||||
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: '',
|
||||
tips: false
|
||||
};
|
||||
|
||||
_ordersOk = false;
|
||||
|
||||
range = new FormGroup({
|
||||
start: new FormControl<Date | null>(null),
|
||||
end: new FormControl<Date | null>(null),
|
||||
});
|
||||
// -------------------------------------
|
||||
//
|
||||
// Language Support
|
||||
//
|
||||
vE = {
|
||||
dbexportSettingsTitle : '',
|
||||
dbexportExportDescrip : '',
|
||||
dbexportDateRange : '',
|
||||
dbexportStartDate : '',
|
||||
dbexportEndDate : '',
|
||||
dbexportInvalidStart : '',
|
||||
dbexportInvalidEnd : '',
|
||||
dbexportNoordersCreated : '',
|
||||
dbexportNothingTodo : '',
|
||||
dbexportBtnClose : '',
|
||||
dbexportDownloadLink : '',
|
||||
dbexportFileHeader : '',
|
||||
dbexportClosedYes : '',
|
||||
dbexportClosedNo : '',
|
||||
dbexportPaidYes : '',
|
||||
dbexportPaidNo : ''
|
||||
};
|
||||
//
|
||||
|
||||
constructor(private languageService : LanguageService,
|
||||
private dialogRef: MatDialogRef<DbExportComponent>,
|
||||
private sanitizer: DomSanitizer,
|
||||
public orderService: OrderService,
|
||||
public userService: UserService) {
|
||||
this.ownerUpdate = userService.ownerUpdate;
|
||||
this.orderService.getAllOrders();
|
||||
this.ordersUpdate = orderService.allOrdersUpdate;
|
||||
}
|
||||
|
||||
ngOnInit(): void {
|
||||
console.log('db-export Init -->');
|
||||
this.chgUILanguage();
|
||||
this.owner = this.userService.currentOwner();
|
||||
console.log(this.owner.name);
|
||||
console.log(this.range);
|
||||
this.ordersUpdate.subscribe((orders) => {
|
||||
this.orders = orders;
|
||||
// console.log('Order -> ' + this.orders[0].timestamp);
|
||||
if( this.orders.length != 0 ) {
|
||||
this._ordersOk = true
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
ordersOk() : boolean {
|
||||
return this._ordersOk;
|
||||
}
|
||||
|
||||
checkReady() : boolean {
|
||||
var data : string = '';
|
||||
var chkRdy : boolean = false;
|
||||
if ( (this.range.value.start != null ) &&
|
||||
(this.range.value.end != null) ) {
|
||||
// process order list
|
||||
const formatter = new Intl.NumberFormat('en-US', {
|
||||
minimumFractionDigits: 8,
|
||||
maximumFractionDigits: 8,
|
||||
});
|
||||
|
||||
// create header
|
||||
data = this.vE.dbexportFileHeader + "\n";
|
||||
|
||||
var iniDate = new Date(this.range.value.start);
|
||||
var endDate = new Date(this.range.value.end);
|
||||
for (let i=0; i < this.orders.length; i++){
|
||||
var date = new Date(this.orders[i]!.timestamp!);
|
||||
var orderid = String(this.orders[i]._id);
|
||||
var closed = this.orders[i].closed ? this.vE.dbexportClosedYes : this.vE.dbexportClosedNo ;
|
||||
/*
|
||||
console.log('Order No. ' +
|
||||
this.orders[i]._id! + ' - totalZec = ' +
|
||||
this.orders[i].totalZec);
|
||||
*/
|
||||
var paid = this.orders[i].paid ? this.vE.dbexportPaidYes : this.vE.dbexportPaidNo ;
|
||||
if ( (date >= iniDate) && (date <= endDate) ) {
|
||||
data = data +
|
||||
date.getFullYear() + '-' +
|
||||
(date.getMonth()+1).toString().padStart(2,'0') + '-' +
|
||||
date.getDate().toString().padStart(2,'0')
|
||||
+ ',' +
|
||||
orderid + ',' +
|
||||
this.orders[i].currency + ',' +
|
||||
closed + ',' +
|
||||
this.orders[i].total + ',' +
|
||||
this.orders[i].price! + ',' +
|
||||
this.orders[i].totalZec + ',' +
|
||||
this.orders[i].taxAmount + ',' +
|
||||
this.orders[i].vatAmount + ',' +
|
||||
this.orders[i].tipAmount + ',' +
|
||||
paid + ',"' +
|
||||
this.orders[i].externalInvoice + '"' +
|
||||
'\n';
|
||||
}
|
||||
}
|
||||
const blob = new Blob([data], { type: 'application/octet-stream' });
|
||||
this.fileUrl = this.sanitizer.bypassSecurityTrustResourceUrl(window.URL.createObjectURL(blob));
|
||||
|
||||
chkRdy = true;
|
||||
}
|
||||
return chkRdy;
|
||||
}
|
||||
|
||||
closedbExport() {
|
||||
this.dialogRef.close();
|
||||
}
|
||||
|
||||
chgUILanguage(){
|
||||
console.log('DBEXPORT.chgUILanguage Called ');
|
||||
this.languageService.getViewElements('dbexport').subscribe(
|
||||
response => {
|
||||
console.log('Received >> ', response );
|
||||
console.log('Language Code : ', response.language);
|
||||
console.log('Component Name : ',response.component);
|
||||
console.log('Language data : ',response.data);
|
||||
|
||||
this.vE.dbexportSettingsTitle = response.data.dbexport_settings_title;
|
||||
this.vE.dbexportExportDescrip = response.data.dbexport_export_descrip;
|
||||
this.vE.dbexportDateRange = response.data.dbexport_date_range;
|
||||
this.vE.dbexportStartDate = response.data.dbexport_start_date;
|
||||
this.vE.dbexportEndDate = response.data.dbexport_end_date;
|
||||
this.vE.dbexportInvalidStart = response.data.dbexport_invalid_start;
|
||||
this.vE.dbexportInvalidEnd = response.data.dbexport_invalid_end;
|
||||
this.vE.dbexportNoordersCreated = response.data.dbexport_noorders_created;
|
||||
this.vE.dbexportNothingTodo = response.data.dbexport_nothing_todo;
|
||||
this.vE.dbexportBtnClose = response.data.dbexport_btn_close;
|
||||
this.vE.dbexportDownloadLink = response.data.dbexport_download_link;
|
||||
this.vE.dbexportFileHeader = response.data.dbexport_file_header;
|
||||
this.vE.dbexportClosedYes = response.data.dbexport_closed_yes;
|
||||
this.vE.dbexportClosedNo = response.data.dbexport_closed_no;
|
||||
this.vE.dbexportPaidYes = response.data.dbexport_paid_yes;
|
||||
this.vE.dbexportPaidNo = response.data.dbexport_paid_no;
|
||||
|
||||
},
|
||||
error => { console.log('Error >> ',error); }
|
||||
);
|
||||
}
|
||||
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
import {Injectable} from '@angular/core';
|
||||
import {Subject, Subscription, BehaviorSubject, Observable} from 'rxjs';
|
||||
import {BehaviorSubject, Observable} from 'rxjs';
|
||||
import {HttpClient, HttpParams, HttpHeaders} from '@angular/common/http';
|
||||
import {UserService} from './user.service';
|
||||
import { Owner } from './owner.model';
|
||||
|
@ -12,6 +12,7 @@ var Buffer = require('buffer/').Buffer;
|
|||
@Injectable({providedIn: 'root'})
|
||||
export class FullnodeService{
|
||||
beUrl = ConfigData.Be_URL;
|
||||
private session: null|string = '';
|
||||
private dataStore: { height: number, memoList: string[], addr: string, price: number } = { height: 0, memoList: [], addr: '', price:0 };
|
||||
private _heightUpdated: BehaviorSubject<number> = new BehaviorSubject(this.dataStore.height);
|
||||
private _memoUpdated: BehaviorSubject<string[]> = new BehaviorSubject(this.dataStore.memoList);
|
||||
|
@ -22,8 +23,8 @@ export class FullnodeService{
|
|||
public readonly memoUpdate: Observable<string[]> = this._memoUpdated.asObservable();
|
||||
public readonly priceUpdate: Observable<number> = this._priceUpdated.asObservable();
|
||||
public readonly ownerUpdate: Observable<Owner>;
|
||||
private UserSub: Subscription = new Subscription();
|
||||
private reqHeaders: HttpHeaders;
|
||||
private params : HttpParams;
|
||||
private owner: Owner = {
|
||||
_id: '',
|
||||
name: '',
|
||||
|
@ -33,25 +34,19 @@ export class FullnodeService{
|
|||
taxValue: 0,
|
||||
vat: false,
|
||||
vatValue: 0,
|
||||
first: '',
|
||||
last: '',
|
||||
email: '',
|
||||
street: '',
|
||||
city: '',
|
||||
state: '',
|
||||
postal: '',
|
||||
phone: '',
|
||||
paid: false,
|
||||
website: '',
|
||||
country: '',
|
||||
zats: false,
|
||||
invoices: false,
|
||||
expiration: new Date(Date.now()).toISOString(),
|
||||
payconf: false,
|
||||
viewkey: ''
|
||||
crmToken: '',
|
||||
viewkey: '',
|
||||
tips: false
|
||||
};
|
||||
|
||||
constructor(private http: HttpClient, public userService: UserService){
|
||||
this.session = localStorage.getItem('s4z_token');
|
||||
this.params = new HttpParams().append('session', this.session!);
|
||||
var auth = 'Basic ' + Buffer.from(ConfigData.UsrPwd).toString('base64');
|
||||
this.reqHeaders = new HttpHeaders().set('Authorization', auth);
|
||||
this.ownerUpdate = userService.ownerUpdate;
|
||||
|
@ -64,7 +59,7 @@ export class FullnodeService{
|
|||
}
|
||||
|
||||
getHeight(){
|
||||
let obs = this.http.get<{message: string, height: number}>(this.beUrl+'api/blockheight', { headers: this.reqHeaders });
|
||||
let obs = this.http.get<{message: string, height: number}>(this.beUrl+'blockheight', { headers: this.reqHeaders, params: this.params });
|
||||
obs.subscribe((BlockData) => {
|
||||
this.dataStore.height = BlockData.height;
|
||||
this._heightUpdated.next(Object.assign({}, this.dataStore).height);
|
||||
|
@ -75,8 +70,8 @@ export class FullnodeService{
|
|||
|
||||
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'});
|
||||
const params = this.params.append('currency', currency);
|
||||
let obs = this.http.get<{message: string, price: any}>(this.beUrl+'price', { headers:this.reqHeaders, params: params, observe: 'response'});
|
||||
obs.subscribe((PriceData) => {
|
||||
if (PriceData.status == 200) {
|
||||
this.dataStore.price = PriceData.body!.price.price;
|
||||
|
@ -91,7 +86,7 @@ export class FullnodeService{
|
|||
}
|
||||
|
||||
getAddr() {
|
||||
let obs = this.http.get<{message: string, addr: string}>(this.beUrl+'api/getaddr', { headers: this.reqHeaders });
|
||||
let obs = this.http.get<{message: string, addr: string}>(this.beUrl+'getaddr', { headers: this.reqHeaders, params: this.params });
|
||||
|
||||
obs.subscribe((AddrData) => {
|
||||
this.dataStore.addr = AddrData.addr;
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
<mat-toolbar color="primary">
|
||||
<span align="center">
|
||||
<img class="logo" src="/assets/logo-new-white.png" height="40px" />
|
||||
<img class="logo" src="/assets/logo-new-white_01.png" height="40px" />
|
||||
</span>
|
||||
<span class="spacer"></span>
|
||||
<span align="center">
|
||||
<p class="mini text">Currency: {{ getCurrency() }}</p>
|
||||
<p class="mini text">Last block:</p>
|
||||
<p class="mini text"> {{ vE.headerGetCurrency }} {{ getCurrency() }}</p>
|
||||
<p class="mini text">{{ vE.headerLastBlock }} </p>
|
||||
<p class="mini text">{{heightUpdate | async}}</p>
|
||||
</span>
|
||||
<span>
|
||||
<button mat-raised-button (click)="logout()"><mat-icon class="logbutton">logout</mat-icon></button>
|
||||
<button mat-icon-button (click)="logout()"><mat-icon>logout</mat-icon></button>
|
||||
</span>
|
||||
</mat-toolbar>
|
||||
|
|
|
@ -1,13 +1,15 @@
|
|||
import {Component, OnInit, OnDestroy} from '@angular/core';
|
||||
import { MatDialog, MatDialogConfig} from '@angular/material/dialog';
|
||||
import {FullnodeService} from '../fullnode.service';
|
||||
import { FullnodeService } from '../fullnode.service';
|
||||
import { Router } from '@angular/router';
|
||||
import { UserService } from '../user.service';
|
||||
import { CancelComponent } from '../cancel/cancel.component';
|
||||
import {Subscription, Observable} from 'rxjs';
|
||||
import { Observable } from 'rxjs';
|
||||
|
||||
import {Owner} from '../owner.model';
|
||||
|
||||
import { LanguageService } from '../language.service';
|
||||
|
||||
@Component({
|
||||
selector: 'app-header',
|
||||
templateUrl: './header.component.html',
|
||||
|
@ -26,33 +28,37 @@ export class HeaderComponent implements OnInit, OnDestroy {
|
|||
taxValue: 0,
|
||||
vat: false,
|
||||
vatValue: 0,
|
||||
first: '',
|
||||
last: '',
|
||||
email: '',
|
||||
street: '',
|
||||
city: '',
|
||||
state: '',
|
||||
postal: '',
|
||||
phone: '',
|
||||
paid: false,
|
||||
website: '',
|
||||
country: '',
|
||||
zats: false,
|
||||
invoices: false,
|
||||
expiration: new Date(Date.now()).toISOString(),
|
||||
payconf: false,
|
||||
viewkey: ''
|
||||
crmToken: '',
|
||||
viewkey: '',
|
||||
tips: false
|
||||
};
|
||||
private session: string | null = '';
|
||||
public heightUpdate: Observable<number>;
|
||||
public ownerUpdate: Observable<Owner>;
|
||||
public uZaddrUpdate: Observable<string>;
|
||||
|
||||
//
|
||||
// Language Support
|
||||
//
|
||||
vE = {
|
||||
headerGetCurrency : '',
|
||||
headerLastBlock : '',
|
||||
headerLogoutLbl : '',
|
||||
headerLogoutMsg1 : '',
|
||||
headerLogoutMsg2 : ''
|
||||
}
|
||||
//
|
||||
// ------------------------------------------------------------
|
||||
constructor(
|
||||
public fullnodeService: FullnodeService,
|
||||
public userService: UserService,
|
||||
private dialog: MatDialog,
|
||||
private router: Router
|
||||
private router: Router,
|
||||
private languageService: LanguageService
|
||||
){
|
||||
this.heightUpdate = fullnodeService.heightUpdate;
|
||||
this.uZaddrUpdate = userService.uZaddrUpdate;
|
||||
|
@ -62,8 +68,8 @@ export class HeaderComponent implements OnInit, OnDestroy {
|
|||
});
|
||||
}
|
||||
|
||||
|
||||
ngOnInit(){
|
||||
this.chgUILanguage();
|
||||
}
|
||||
|
||||
ngOnDestroy(){
|
||||
|
@ -78,18 +84,43 @@ export class HeaderComponent implements OnInit, OnDestroy {
|
|||
|
||||
dialogConfig.disableClose = true;
|
||||
dialogConfig.autoFocus = true;
|
||||
dialogConfig.data = {title: 'Logout?', msg: 'Are you sure you want to disconnect from ZGo? You will have to re-link your wallet via shielded memo.'};
|
||||
dialogConfig.data = { title: this.vE.headerLogoutLbl,
|
||||
msg1: this.vE.headerLogoutMsg1,
|
||||
msg2: this.vE.headerLogoutMsg2 };
|
||||
|
||||
//console.log(dialogConfig.data);
|
||||
|
||||
const dialogRef = this.dialog.open(CancelComponent, dialogConfig);
|
||||
dialogRef.afterClosed().subscribe(val => {
|
||||
if(val){
|
||||
// console.log('Logout!');
|
||||
this.userService.deleteUser().subscribe(UserResponse => {
|
||||
console.log('Rerouting');
|
||||
//console.log('Rerouting');
|
||||
this.userService.findUser();
|
||||
this.router.navigate(['/login']);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
chgUILanguage(){
|
||||
//console.log('HEADER.chgUILanguage Called ');
|
||||
this.languageService.getViewElements('header').subscribe({
|
||||
next: response => {
|
||||
//console.log('Received >> ', response );
|
||||
//console.log('Language Code : ', response.language);
|
||||
//console.log('Component Name : ',response.component);
|
||||
//console.log('Language data : ',response.data);
|
||||
|
||||
this.vE.headerLastBlock = response.data.header_last_block;
|
||||
this.vE.headerGetCurrency = response.data.header_get_currency;
|
||||
this.vE.headerLogoutLbl = response.data.header_logout_lbl;
|
||||
this.vE.headerLogoutMsg1 = response.data.header_logout_msg1;
|
||||
this.vE.headerLogoutMsg2 = response.data.header_logout_msg2;
|
||||
|
||||
},
|
||||
error: error => { console.log('Error >> ',error); }
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -9,12 +9,12 @@
|
|||
<div class="invoiceDetail"
|
||||
*ngIf="!error"
|
||||
id="invoice">
|
||||
<div class="invoiceHdrTxt1">Invoice</div>
|
||||
<div class="invoiceHdrTxt2">Order ID: {{orderId}}</div>
|
||||
<div class="invoiceHdrTxt3">Date:{{order.timestamp | date}}
|
||||
<div class="invoiceHdrTxt1">{{ vE.invoiceInvoiceLbl }}</div>
|
||||
<div class="invoiceHdrTxt2">{{ vE.invoiceOrderId }} {{orderId}}</div>
|
||||
<div class="invoiceHdrTxt3"> {{ vE.invoiceOrderDate }} {{order.timestamp | date}}
|
||||
</div>
|
||||
<div style="height: 10px;"></div>
|
||||
<div class="zecData">Zcash Price: {{order.price | number: '1.02' | currency: order.currency.toUpperCase()}}</div>
|
||||
<div class="zecData">{{ vE.invoiceZcashPrice }} {{order.price | number: '1.02' | currency: order.currency.toUpperCase()}}</div>
|
||||
<div style="height: 2px;"></div>
|
||||
<div class="zecData">Total: <img class="zecSign" src="/assets/zec_rv.png" />{{order.totalZec | number: '1.08'}}
|
||||
</div>
|
||||
|
@ -29,11 +29,11 @@
|
|||
</th>
|
||||
<th width="15%"
|
||||
class="detailTitle1">
|
||||
Qty.
|
||||
{{ vE.invoiceQtyLbl }}
|
||||
</th>
|
||||
<th width="30%"
|
||||
class="detailTitle2">
|
||||
Price ({{order.currency.toUpperCase()}})
|
||||
{{ vE.invoiceOrderPrice }}({{order.currency.toUpperCase()}})
|
||||
</th>
|
||||
</tr>
|
||||
<tr class="invoice-detail"
|
||||
|
@ -51,10 +51,28 @@
|
|||
{{( item.qty * item.cost ) | number : '1.02' | currency: order.currency.toUpperCase()}}
|
||||
</td>
|
||||
</tr>
|
||||
<tr *ngIf="order.taxAmount > 0">
|
||||
<td class="newOrdertbdetail" style="text-align: right;">{{ vE.invoiceTax }}</td>
|
||||
<td class="newOrdertbdetail" style="text-align: right;"></td>
|
||||
<td class="newOrdertbdetail" style="text-align: right;">{{ order.taxAmount | currency: order.currency.toUpperCase() }}</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr *ngIf="order.vatAmount > 0">
|
||||
<td class="newOrdertbdetail" style="text-align: right;">{{ vE.invoiceVAT }}</td>
|
||||
<td class="newOrdertbdetail" style="text-align: right;"></td>
|
||||
<td class="newOrdertbdetail" style="text-align: right;">{{ order.vatAmount | currency: order.currency.toUpperCase() }}</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr *ngIf="order.tipAmount > 0">
|
||||
<td class="newOrdertbdetail" style="text-align: right;">{{ vE.invoiceTip }}</td>
|
||||
<td class="newOrdertbdetail" style="text-align: right;"></td>
|
||||
<td class="newOrdertbdetail" style="text-align: right;">{{ order.tipAmount | currency: order.currency.toUpperCase() }}</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr class="invoice-title">
|
||||
<th width="55%"
|
||||
class="detailLineRight">
|
||||
Invoice Total:
|
||||
{{ vE.invoiceInvoiceTotal }}
|
||||
</th>
|
||||
<th width="15%"
|
||||
class="detailLineLeft">
|
||||
|
@ -76,10 +94,10 @@
|
|||
text-align: center;">
|
||||
<p *ngIf="order.paid">
|
||||
<fa-icon [icon]="faCheck"
|
||||
color="primary"></fa-icon> Payment confirmed</p>
|
||||
color="primary"></fa-icon> {{ vE.invoicePaymentConfirmed }}</p>
|
||||
<p *ngIf="!order.paid">
|
||||
<fa-icon [style]="getIconStyle(order)"
|
||||
[icon]="faHourglass"></fa-icon> Payment pending!!</p>
|
||||
[icon]="faHourglass"></fa-icon> {{ vE.invoicePaymentPending }}</p>
|
||||
</td>
|
||||
<td width="25%">
|
||||
<div style="text-align: right;"
|
||||
|
@ -88,6 +106,65 @@
|
|||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div style="height: 15px;"></div>
|
||||
<div *ngIf="!order.paid" width="100%"
|
||||
style="font-size: 14px;
|
||||
font-weight: 700;
|
||||
font-style: italic;
|
||||
text-align: center;">
|
||||
{{ vE.invoiceScanQrcode }}
|
||||
</div>
|
||||
<div *ngIf="!order.paid" style="text-align: center;
|
||||
margin-top: 10px;
|
||||
line-height: 30px;">
|
||||
<div style="font-family: 'Spartan';
|
||||
font-size: 14px;
|
||||
line-height: 20px;">
|
||||
{{ vE.invoiceCantScan }}<br>
|
||||
{{ vE.invoiceUseThis }} <a [href]="zcashUrl">{{ vE.invoiceWalletLink }}</a>{{ vE.invoiceDotOr }}
|
||||
<div style="display: flex;
|
||||
justify-content: space-between;">
|
||||
<button style="margin-top: 20px;
|
||||
font-weight: 700;
|
||||
background-color: lightgray;"
|
||||
mat-raised-button
|
||||
(click)="copyAddress()">{{ vE.invoiceCopyAddress }}</button>
|
||||
<button style="margin-top: 20px;
|
||||
font-weight: 700;
|
||||
background-color: lightgray;"
|
||||
mat-raised-button
|
||||
(click)="copyAmount()">{{ vE.invoiceCopyAmount }}</button>
|
||||
</div>
|
||||
<button style="margin-top: 20px;
|
||||
font-weight: 700;
|
||||
background-color: lightgray;"
|
||||
mat-raised-button
|
||||
(click)="copyMemo()" *ngIf="!isWCOrder">{{ vE.invoiceCopyMemo }}</button>
|
||||
|
||||
<div style="display: flex;
|
||||
justify-content: space-between;"
|
||||
*ngIf="isWCOrder">
|
||||
<button style="margin-top: 20px;
|
||||
font-weight: 700;
|
||||
background-color: lightgray;"
|
||||
mat-raised-button
|
||||
(click)="copyMemo()">{{ vE.invoiceCopyMemo }}</button>
|
||||
|
||||
<button style="margin-top: 20px;
|
||||
font-weight: 700;
|
||||
background-color: lightcyan;"
|
||||
mat-raised-button
|
||||
(click)="backToShop()" >
|
||||
<fa-icon style="color: #FB4F14;
|
||||
margin-bottom: -2px;
|
||||
margin-right: 5px;
|
||||
font-size: 20px;
|
||||
cursor: pointer;"
|
||||
[icon]="faArrowUpRightFromSquare"> </fa-icon>
|
||||
{{ vE.invoiceReturnToshop }}</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
@ -98,12 +175,12 @@
|
|||
font-size: 20px;
|
||||
padding: 4px;
|
||||
height: 24px;">
|
||||
Incorrect Invoice ID.
|
||||
{{ vE.invoiceInvalidId }}
|
||||
</div>
|
||||
<div style="font-family: Spartan !important;
|
||||
font-size: 16px;
|
||||
padding: 4px;">
|
||||
No information available.
|
||||
{{ vE.invoiceInfoNotavail }}
|
||||
</div>
|
||||
<div style="height: 10px;"></div>
|
||||
<mat-card-actions>
|
||||
|
@ -113,4 +190,4 @@
|
|||
</mat-card-actions>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,9 +1,14 @@
|
|||
import { Component, OnInit } from '@angular/core';
|
||||
import { ActivatedRoute, Router } from '@angular/router';
|
||||
import { DomSanitizer, SafeUrl } from '@angular/platform-browser';
|
||||
import { ReceiptService } from '../receipt.service';
|
||||
import { Order} from '../order/order.model';
|
||||
import { Observable } from 'rxjs';
|
||||
import { faCheck, faHourglass } from '@fortawesome/free-solid-svg-icons';
|
||||
import { faCheck, faHourglass, faArrowUpRightFromSquare } from '@fortawesome/free-solid-svg-icons';
|
||||
|
||||
import { NotifierService } from '../notifier.service';
|
||||
|
||||
import { LanguageService } from '../language.service';
|
||||
|
||||
var QRCode = require('easyqrcodejs');
|
||||
var URLSafeBase64 = require('urlsafe-base64');
|
||||
|
@ -14,63 +19,128 @@ var Buffer = require('buffer/').Buffer;
|
|||
templateUrl: './invoice.component.html',
|
||||
styleUrls: ['./invoice.component.css']
|
||||
})
|
||||
|
||||
export class InvoiceComponent implements OnInit {
|
||||
faCheck = faCheck;
|
||||
faHourglass = faHourglass;
|
||||
faArrowUpRightFromSquare = faArrowUpRightFromSquare;
|
||||
orderId;
|
||||
orderToken: string = '';
|
||||
public orderUpdate: Observable<Order>;
|
||||
public nameUpdate: Observable<string>;
|
||||
name: string = '';
|
||||
error: boolean = false;
|
||||
codeString: string = 'Test';
|
||||
|
||||
codeString: string = '';
|
||||
invString: string = '';
|
||||
public isWCOrder : boolean = false;
|
||||
zcashUrl: SafeUrl = '';
|
||||
externalURL: string = '';
|
||||
order:Order = {
|
||||
address: '',
|
||||
session: '',
|
||||
timestamp: '',
|
||||
closed: false,
|
||||
currency: '',
|
||||
price: 0,
|
||||
total: 0,
|
||||
totalZec: 0,
|
||||
paid: false,
|
||||
lines: [
|
||||
{
|
||||
qty: 1,
|
||||
name: '',
|
||||
cost:0
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
_id: '',
|
||||
address: '',
|
||||
session: '',
|
||||
timestamp: '',
|
||||
closed: false,
|
||||
currency: '',
|
||||
price: 0,
|
||||
total: 0,
|
||||
totalZec: 0,
|
||||
paid: false,
|
||||
externalInvoice: '',
|
||||
shortCode: '',
|
||||
token: '',
|
||||
taxAmount: 0,
|
||||
vatAmount: 0,
|
||||
tipAmount: 0,
|
||||
lines: [
|
||||
{
|
||||
qty: 1,
|
||||
name: '',
|
||||
cost:0
|
||||
}
|
||||
]
|
||||
};
|
||||
// -------------------------------------
|
||||
//
|
||||
// Language Support
|
||||
//
|
||||
vE = {
|
||||
invoiceInvoiceLbl : '',
|
||||
invoiceOrderId : '',
|
||||
invoiceOrderDate : '',
|
||||
invoiceZcashPrice : '',
|
||||
invoiceQtyLbl : '',
|
||||
invoiceOrderPrice : '',
|
||||
invoiceInvoiceTotal : '',
|
||||
invoicePaymentConfirmed : '',
|
||||
invoicePaymentPending : '',
|
||||
invoiceScanQrcode : '',
|
||||
invoiceCantScan : '',
|
||||
invoiceUseThis : '',
|
||||
invoiceWalletLink : '',
|
||||
invoiceDotOr : '',
|
||||
invoiceCopyAddress : '',
|
||||
invoiceCopyAmount : '',
|
||||
invoiceCopyMemo : '',
|
||||
invoiceReturnToshop : '',
|
||||
invoiceCopyNotavail : '',
|
||||
invoiceNotservClose : '',
|
||||
invoiceNotservError : '',
|
||||
invoiceCopyaddressError : '',
|
||||
invoiceCopyamountError : '',
|
||||
invoiceCopymemoError : '',
|
||||
invoiceInvalidId : '',
|
||||
invoiceInfoNotavail : '',
|
||||
invoiceTax : '',
|
||||
invoiceVAT : '',
|
||||
invoiceTip : ''
|
||||
};
|
||||
//
|
||||
constructor(
|
||||
private _ActiveRoute:ActivatedRoute,
|
||||
private router: Router,
|
||||
public receiptService: ReceiptService
|
||||
private sanitizer: DomSanitizer,
|
||||
public receiptService: ReceiptService,
|
||||
private notifierService : NotifierService,
|
||||
private languageService : LanguageService
|
||||
) {
|
||||
this.orderId = this._ActiveRoute.snapshot.paramMap.get("orderId");
|
||||
this.orderUpdate = receiptService.orderUpdate;
|
||||
this.nameUpdate = receiptService.nameUpdate;
|
||||
receiptService.getOrderById(this.orderId!).subscribe(response => {
|
||||
if (response.status == 200){
|
||||
this.error = false;
|
||||
this.codeString = `zcash:${response.body!.order.address}?amount=${response.body!.order.totalZec.toFixed(8)}&memo=${URLSafeBase64.encode(Buffer.from('ZGo Order::'.concat(this.orderId!)))}`;
|
||||
var qrcode = new QRCode(document.getElementById("payment-qr"), {
|
||||
text: this.codeString,
|
||||
this._ActiveRoute.queryParams.subscribe((params) => {
|
||||
this.orderToken = params["token"];
|
||||
receiptService.getOrderById(this.orderId!, this.orderToken!).subscribe(response => {
|
||||
if (response.status == 200){
|
||||
this.error = false;
|
||||
if( response.body!.order.session.substring(0,1) == 'X') {
|
||||
this.invString = response.body!.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.invString)))}`;
|
||||
} else {
|
||||
this.codeString = `zcash:${response.body!.order.address}?amount=${response.body!.order.totalZec.toFixed(8)}&memo=${URLSafeBase64.encode(Buffer.from('ZGo Order::'.concat(this.orderId!)))}`;
|
||||
}
|
||||
var qrcode = new QRCode(document.getElementById("payment-qr"), {
|
||||
text: this.codeString,
|
||||
logo: "/assets/zcash.png",
|
||||
width: 180,
|
||||
height: 180,
|
||||
logoWidth: 50,
|
||||
logoHeight: 50,
|
||||
correctLevel: QRCode.CorrectLevel.H
|
||||
});
|
||||
} else {
|
||||
this.error = true;
|
||||
this.codeString = 'Test';
|
||||
}
|
||||
correctLevel: QRCode.CorrectLevel.H
|
||||
});
|
||||
this.error = false;
|
||||
this.zcashUrl = this.sanitizer.bypassSecurityTrustUrl(this.codeString);
|
||||
} else {
|
||||
this.error = true;
|
||||
this.codeString = 'Test';
|
||||
}
|
||||
});
|
||||
});
|
||||
//console.log('constructor - orderId -> ' + this.orderId);
|
||||
this.orderUpdate = receiptService.orderUpdate;
|
||||
this.nameUpdate = receiptService.nameUpdate;
|
||||
this.orderUpdate.subscribe(order => {
|
||||
this.order = order;
|
||||
if ( order.session.substring(0,1) == 'W') {
|
||||
this.isWCOrder = true;
|
||||
}
|
||||
});
|
||||
this.nameUpdate.subscribe(name => {
|
||||
this.name = name;
|
||||
|
@ -78,13 +148,146 @@ export class InvoiceComponent implements OnInit {
|
|||
}
|
||||
|
||||
ngOnInit(): void {
|
||||
this.chgUILanguage();
|
||||
}
|
||||
|
||||
backToShop() {
|
||||
if ( this.isWCOrder ) {
|
||||
// console.log('External Invoice -> ' + this.order.externalInvoice );
|
||||
const b64URL:string = this.order.externalInvoice.substring(0,this.order.externalInvoice.indexOf("-"));
|
||||
// console.log('encodedURL -> ' + b64URL );
|
||||
const shopURL: string = Buffer.from(b64URL, 'base64').toString();
|
||||
const tmp_orderid = this.order.externalInvoice.substring(this.order.externalInvoice.indexOf('-')+1);
|
||||
const wc_order_key = tmp_orderid.substring(tmp_orderid.indexOf('-')+1);
|
||||
const wc_orderid = tmp_orderid.substring(0,tmp_orderid.indexOf('-'));
|
||||
// console.log('wc_order_id -> ' + wc_orderid);
|
||||
// console.log('wc_order_key -> ' + wc_order_key);
|
||||
// console.log('new URL -> ' + shopURL + '/checkout/order-received/' + wc_orderid + '/?key=' + wc_order_key);
|
||||
if ( shopURL ) {
|
||||
// console.log('Opening URL....' + shopURL);
|
||||
window.open( shopURL + '/checkout/order-received/' + wc_orderid + '/?key=' + wc_order_key,"_blank");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
getIconStyle(order : Order) {
|
||||
if( order.paid )
|
||||
return "font-size: 14px; color: #72cc50; margin-bottom: -2px;";
|
||||
return "font-size: 14px; color: #72cc50; margin-bottom: -2px;";
|
||||
return "color: #FB4F14; margin-bottom: -2px; cursor: pointer;";
|
||||
|
||||
}
|
||||
|
||||
copyAddress() {
|
||||
if (!navigator.clipboard) {
|
||||
// alert("Copy functionality not supported");
|
||||
this.notifierService
|
||||
.showNotification(
|
||||
this.vE.invoiceCopyNotavail,
|
||||
this.vE.invoiceNotservClose,
|
||||
'error',
|
||||
this.vE.invoiceNotservError);
|
||||
}
|
||||
try {
|
||||
navigator.clipboard.writeText(this.order.address);
|
||||
} catch (err) {
|
||||
this.notifierService
|
||||
.showNotification(
|
||||
this.vE.invoiceCopyaddressError,
|
||||
this.vE.invoiceNotservClose,
|
||||
'error',
|
||||
this.vE.invoiceNotservError);
|
||||
// console.error("Error", err);
|
||||
}
|
||||
}
|
||||
|
||||
copyAmount() {
|
||||
if (!navigator.clipboard) {
|
||||
// alert("Copy functionality not supported");
|
||||
this.notifierService
|
||||
.showNotification(
|
||||
this.vE.invoiceCopyNotavail,
|
||||
this.vE.invoiceNotservClose,
|
||||
'error',
|
||||
this.vE.invoiceNotservError);
|
||||
}
|
||||
try {
|
||||
navigator.clipboard.writeText(this.order.totalZec.toString());
|
||||
} catch (err) {
|
||||
this.notifierService
|
||||
.showNotification(
|
||||
this.vE.invoiceCopyamountError,
|
||||
this.vE.invoiceNotservClose,
|
||||
'error',
|
||||
this.vE.invoiceNotservError);
|
||||
// console.error("Error", err);
|
||||
}
|
||||
}
|
||||
|
||||
copyMemo() {
|
||||
if (!navigator.clipboard) {
|
||||
// alert("Copy functionality not supported");
|
||||
this.notifierService
|
||||
.showNotification(
|
||||
this.vE.invoiceCopyNotavail,
|
||||
this.vE.invoiceNotservClose,
|
||||
'error',
|
||||
this.vE.invoiceNotservError);
|
||||
}
|
||||
try {
|
||||
navigator.clipboard.writeText("ZGo Order::" + this.order._id);
|
||||
} catch (err) {
|
||||
this.notifierService
|
||||
.showNotification(
|
||||
this.vE.invoiceCopymemoError,
|
||||
this.vE.invoiceNotservClose,
|
||||
'error',
|
||||
this.vE.invoiceNotservError);
|
||||
// console.error("Error", err);
|
||||
}
|
||||
}
|
||||
|
||||
chgUILanguage(){
|
||||
console.log('INVOICE.chgUILanguage Called ');
|
||||
this.languageService.getViewElements('invoice').subscribe(
|
||||
response => {
|
||||
console.log('Received >> ', response );
|
||||
console.log('Language Code : ', response.language);
|
||||
console.log('Component Name : ',response.component);
|
||||
console.log('Language data : ',response.data);
|
||||
|
||||
this.vE.invoiceInvoiceLbl = response.data.invoice_invoice_lbl;
|
||||
this.vE.invoiceOrderId = response.data.invoice_order_id;
|
||||
this.vE.invoiceOrderDate = response.data.invoice_order_date;
|
||||
this.vE.invoiceZcashPrice = response.data.invoice_zcash_price;
|
||||
this.vE.invoiceQtyLbl = response.data.invoice_qty_lbl;
|
||||
this.vE.invoiceOrderPrice = response.data.invoice_order_price;
|
||||
this.vE.invoiceInvoiceTotal = response.data.invoice_invoice_total;
|
||||
this.vE.invoicePaymentConfirmed = response.data.invoice_payment_confirmed;
|
||||
this.vE.invoicePaymentPending = response.data.invoice_payment_pending;
|
||||
this.vE.invoiceScanQrcode = response.data.invoice_scan_qrcode;
|
||||
this.vE.invoiceCantScan = response.data.invoice_cant_scan;
|
||||
this.vE.invoiceUseThis = response.data.invoice_use_this;
|
||||
this.vE.invoiceWalletLink = response.data.invoice_wallet_link;
|
||||
this.vE.invoiceDotOr = response.data.invoice_dot_or;
|
||||
this.vE.invoiceCopyAddress = response.data.invoice_copy_address;
|
||||
this.vE.invoiceCopyAmount = response.data.invoice_copy_amount;
|
||||
this.vE.invoiceCopyMemo = response.data.invoice_copy_memo;
|
||||
this.vE.invoiceReturnToshop = response.data.invoice_return_toshop;
|
||||
this.vE.invoiceCopyNotavail = response.data.invoice_copy_notavail;
|
||||
this.vE.invoiceNotservClose = response.data.invoice_notserv_close;
|
||||
this.vE.invoiceNotservError = response.data.invoice_notserv_error;
|
||||
this.vE.invoiceCopyaddressError = response.data.invoice_copyaddress_error;
|
||||
this.vE.invoiceCopyamountError = response.data.invoice_copyamount_error;
|
||||
this.vE.invoiceCopymemoError = response.data.invoice_copymemo_error;
|
||||
this.vE.invoiceInvalidId = response.data.invoice_invalid_id;
|
||||
this.vE.invoiceInfoNotavail = response.data.invoice_info_notavail;
|
||||
this.vE.invoiceTax = response.data.invoice_tax;
|
||||
this.vE.invoiceVAT = response.data.invoice_vat;
|
||||
this.vE.invoiceTip = response.data.invoice_tip;
|
||||
|
||||
},
|
||||
error => { console.log('Error >> ',error); }
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -12,5 +12,5 @@ input[type=number]{
|
|||
color: white;
|
||||
font-size: 26px;
|
||||
text-align: center;
|
||||
padding: 5px;
|
||||
padding: 10px;
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
<div class='itemDataTitle'>Add to Order</div>
|
||||
<div class='itemDataTitle'>{{ vE.itemaddAdd2Order }}</div>
|
||||
|
||||
<div class='container'>
|
||||
<mat-dialog-content [formGroup]="orderForm">
|
||||
|
@ -9,13 +9,15 @@
|
|||
</mat-dialog-content>
|
||||
|
||||
<div style="display: flex;
|
||||
justify-content: space-between;">
|
||||
justify-content: space-between;
|
||||
margin-top: 20px;
|
||||
padding: 20px;">
|
||||
<button mat-raised-button
|
||||
class="text"
|
||||
(click)="close()">Cancel</button>
|
||||
(click)="close()">{{ vE.itemaddCancelBtn }}</button>
|
||||
<button mat-raised-button
|
||||
class="text"
|
||||
color="primary"
|
||||
(click)="save()">Add</button>
|
||||
(click)="save()">{{ vE.itemaddSaveBtn }}</button>
|
||||
</div>
|
||||
</div>
|
|
@ -4,6 +4,9 @@ import { UntypedFormBuilder, Validators, UntypedFormGroup, FormControl } from '@
|
|||
import { LineItem } from '../lineitem.model';
|
||||
import { Order } from '../../order/order.model';
|
||||
|
||||
import { LanguageService } from '../../language.service';
|
||||
import { LanguageData } from '../../language.model';
|
||||
|
||||
@Component({
|
||||
selector: 'app-item-add',
|
||||
templateUrl: './item-add.component.html',
|
||||
|
@ -15,8 +18,18 @@ export class ItemAddComponent implements OnInit {
|
|||
orderForm: UntypedFormGroup;
|
||||
lineItem: LineItem;
|
||||
//order: Order;
|
||||
|
||||
//
|
||||
// Language Support
|
||||
//
|
||||
vE = {
|
||||
itemaddAdd2Order : '',
|
||||
itemaddCancelBtn : '',
|
||||
itemaddSaveBtn : ''
|
||||
}
|
||||
//
|
||||
// ------------------------------------------------------------
|
||||
constructor(
|
||||
private languageService : LanguageService,
|
||||
private fb: UntypedFormBuilder,
|
||||
private dialogRef: MatDialogRef<ItemAddComponent>,
|
||||
@Inject(MAT_DIALOG_DATA) public data: LineItem
|
||||
|
@ -32,6 +45,7 @@ export class ItemAddComponent implements OnInit {
|
|||
}
|
||||
|
||||
ngOnInit() {
|
||||
this.chgUILanguage();
|
||||
}
|
||||
|
||||
close() {
|
||||
|
@ -42,4 +56,22 @@ export class ItemAddComponent implements OnInit {
|
|||
this.lineItem.qty = this.orderForm.value.qty;
|
||||
this.dialogRef.close(this.lineItem);
|
||||
}
|
||||
|
||||
chgUILanguage(){
|
||||
console.log('ITEMADD.chgUILanguage Called ');
|
||||
this.languageService.getViewElements('itemadd').subscribe(
|
||||
response => {
|
||||
console.log('Received >> ', response );
|
||||
console.log('Language Code : ', response.language);
|
||||
console.log('Component Name : ',response.component);
|
||||
console.log('Language data : ',response.data);
|
||||
|
||||
this.vE.itemaddAdd2Order = response.data.itemadd_add_2order;
|
||||
this.vE.itemaddCancelBtn = response.data.itemadd_cancel_btn;
|
||||
this.vE.itemaddSaveBtn = response.data.itemadd_save_btn;
|
||||
},
|
||||
error => { console.log('Error >> ',error); }
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
|
||||
<div class='itemDataTitle'>Add Item</div>
|
||||
<div class='itemDataTitle'>{{ vE.itemcreateAddItem }}</div>
|
||||
|
||||
<div class='container' style="margin-top: 20px;">
|
||||
<mat-dialog-content [formGroup]="form">
|
||||
<span style="line-height: 10px;"></span>
|
||||
<mat-form-field class="text" [style.width.%]="100">
|
||||
<mat-label>Item</mat-label>
|
||||
<mat-label>{{ vE.itemcreateItemLbl }}</mat-label>
|
||||
<input type="hidden" formControlName="id">
|
||||
<input matInput
|
||||
placeholder="Item"
|
||||
|
@ -13,7 +13,7 @@
|
|||
maxlength="16">
|
||||
</mat-form-field >
|
||||
<mat-form-field class="text" [style.width.%]="100">
|
||||
<mat-label>Description</mat-label>
|
||||
<mat-label>{{ vE.itemcreateItemDescr }}</mat-label>
|
||||
<textarea matInput
|
||||
placeholder="Description"
|
||||
formControlName="description"
|
||||
|
@ -22,18 +22,20 @@
|
|||
overflow:auto;"></textarea>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="text" [style.width.%]="100">
|
||||
<mat-label>Price</mat-label>
|
||||
<mat-label>{{ vE.itemcreateItemPrice }}</mat-label>
|
||||
<input matInput type="number" placeholder="Price" formControlName="cost">
|
||||
<div *ngIf="!form.controls['cost'].valid && form.controls['cost'].touched">
|
||||
<div *ngIf="form.controls['cost'].errors?.pattern">Use only numbers</div>
|
||||
<div *ngIf="form.controls['cost'].errors?.pattern">{{ vE.itemcreateUseNums }}</div>
|
||||
</div>
|
||||
</mat-form-field>
|
||||
</mat-dialog-content>
|
||||
|
||||
<div style="display: flex;
|
||||
justify-content: space-between;">
|
||||
<button mat-raised-button class="text" (click)="close()">Close</button>
|
||||
<button mat-raised-button class="text" color="primary" (click)="save()">Save</button>
|
||||
justify-content: space-between;
|
||||
margin-top: 20px;
|
||||
padding: 20px;">
|
||||
<button mat-raised-button class="text" (click)="close()">{{ vE.itemcreateCloseBtn }}</button>
|
||||
<button mat-raised-button class="text" color="primary" (click)="save()">{{ vE.itemcreateSaveBtn }}</button>
|
||||
</div>
|
||||
|
||||
</div>
|
|
@ -3,6 +3,8 @@ import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dial
|
|||
import { UntypedFormBuilder, Validators, UntypedFormGroup, UntypedFormControl } from '@angular/forms';
|
||||
import { Item } from '../item.model';
|
||||
|
||||
import { LanguageService } from '../../language.service';
|
||||
import { LanguageData } from '../../language.model';
|
||||
|
||||
@Component({
|
||||
selector: 'app-item-create',
|
||||
|
@ -15,8 +17,22 @@ export class ItemCreateComponent implements OnInit {
|
|||
form: UntypedFormGroup;
|
||||
id: string | undefined = '';
|
||||
numberRegEx = /\d*\.?\d{1,2}/;
|
||||
|
||||
//
|
||||
// Language Support
|
||||
//
|
||||
vE = {
|
||||
itemcreateAddItem : '',
|
||||
itemcreateItemLbl : '',
|
||||
itemcreateItemDescr : '',
|
||||
itemcreateItemPrice : '',
|
||||
itemcreateUseNums : '',
|
||||
itemcreateCloseBtn : '',
|
||||
itemcreateSaveBtn : ''
|
||||
}
|
||||
//
|
||||
// ------------------------------------------------------------
|
||||
constructor(
|
||||
private languageService : LanguageService,
|
||||
private fb: UntypedFormBuilder,
|
||||
private dialogRef: MatDialogRef<ItemCreateComponent>,
|
||||
@Inject(MAT_DIALOG_DATA) public data: Item
|
||||
|
@ -46,6 +62,7 @@ export class ItemCreateComponent implements OnInit {
|
|||
}
|
||||
|
||||
ngOnInit () {
|
||||
this.chgUILanguage();
|
||||
}
|
||||
|
||||
save() {
|
||||
|
@ -56,4 +73,25 @@ export class ItemCreateComponent implements OnInit {
|
|||
close () {
|
||||
this.dialogRef.close();
|
||||
}
|
||||
|
||||
chgUILanguage(){
|
||||
console.log('ITEMLREATE.chgUILanguage Called ');
|
||||
this.languageService.getViewElements('itemcreate').subscribe(
|
||||
response => {
|
||||
console.log('Received >> ', response );
|
||||
console.log('Language Code : ', response.language);
|
||||
console.log('Component Name : ',response.component);
|
||||
console.log('Language data : ',response.data);
|
||||
|
||||
this.vE.itemcreateAddItem = response.data.itemcreate_add_item;
|
||||
this.vE.itemcreateItemLbl = response.data.itemcreate_item_lbl;
|
||||
this.vE.itemcreateItemDescr = response.data.itemcreate_item_descr;
|
||||
this.vE.itemcreateItemPrice = response.data.itemcreate_item_price;
|
||||
this.vE.itemcreateUseNums = response.data.itemcreate_use_nums;
|
||||
this.vE.itemcreateCloseBtn = response.data.itemcreate_close_btn;
|
||||
this.vE.itemcreateSaveBtn = response.data.itemcreate_save_btn;
|
||||
},
|
||||
error => { console.log('Error >> ',error); }
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<div class='itemDataTitle'>Delete Item</div>
|
||||
<div class='itemDataTitle'>{{ vE.itemdelDelItem }}</div>
|
||||
|
||||
<div class='container' style="margin-top: 20px;">
|
||||
<mat-dialog-content >
|
||||
|
@ -6,15 +6,17 @@
|
|||
<span style="line-height: 10px;"></span>
|
||||
|
||||
<mat-dialog-content>
|
||||
<p class="text">Are you sure you want to delete "{{item.name}}"?</p>
|
||||
<p class="text">{{ vE.itemdelConfirmDel }}"{{item.name}}"?</p>
|
||||
</mat-dialog-content>
|
||||
|
||||
</mat-dialog-content>
|
||||
|
||||
<div style="display: flex;
|
||||
justify-content: space-between;">
|
||||
<button mat-raised-button class="text" (click)="close()">Close</button>
|
||||
<button mat-raised-button class="text" color="primary" (click)="save()">Delete</button>
|
||||
justify-content: space-between;
|
||||
margin-top: 20px;
|
||||
padding: 20px;">
|
||||
<button mat-raised-button class="text" (click)="close()">{{ vE.itemdelCloseBtn }}</button>
|
||||
<button mat-raised-button class="text" color="primary" (click)="save()">{{ vE.itemdelDeleteBtn }}</button>
|
||||
</div>
|
||||
|
||||
</div>
|
|
@ -2,6 +2,8 @@ import { Inject, Component, OnInit, OnDestroy, ViewEncapsulation } from '@angula
|
|||
import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
|
||||
import { Item } from '../item.model';
|
||||
|
||||
import { LanguageService } from '../../language.service';
|
||||
import { LanguageData } from '../../language.model';
|
||||
|
||||
@Component({
|
||||
selector: 'app-item-delete',
|
||||
|
@ -11,8 +13,19 @@ import { Item } from '../item.model';
|
|||
|
||||
export class ItemDeleteComponent implements OnInit{
|
||||
item: Item;
|
||||
|
||||
//
|
||||
// Language Support
|
||||
//
|
||||
vE = {
|
||||
itemdelDelItem : '',
|
||||
itemdelConfirmDel : '',
|
||||
itemdelCloseBtn : '',
|
||||
itemdelDeleteBtn : ''
|
||||
}
|
||||
//
|
||||
// ------------------------------------------------------------
|
||||
constructor(
|
||||
private languageService : LanguageService,
|
||||
private dialogRef: MatDialogRef<ItemDeleteComponent>,
|
||||
@Inject(MAT_DIALOG_DATA) public data: Item
|
||||
) {
|
||||
|
@ -20,6 +33,7 @@ export class ItemDeleteComponent implements OnInit{
|
|||
}
|
||||
|
||||
ngOnInit() {
|
||||
this.chgUILanguage();
|
||||
}
|
||||
|
||||
save() {
|
||||
|
@ -29,4 +43,23 @@ export class ItemDeleteComponent implements OnInit{
|
|||
close() {
|
||||
this.dialogRef.close();
|
||||
}
|
||||
|
||||
chgUILanguage(){
|
||||
console.log('ITEMDEL.chgUILanguage Called ');
|
||||
this.languageService.getViewElements('itemdel').subscribe(
|
||||
response => {
|
||||
console.log('Received >> ', response );
|
||||
console.log('Language Code : ', response.language);
|
||||
console.log('Component Name : ',response.component);
|
||||
console.log('Language data : ',response.data);
|
||||
|
||||
this.vE.itemdelDelItem = response.data.itemdel_del_item;
|
||||
this.vE.itemdelConfirmDel = response.data.itemdel_confirm_del;
|
||||
this.vE.itemdelCloseBtn = response.data.itemdel_close_btn;
|
||||
this.vE.itemdelDeleteBtn = response.data.itemdel_delete_btn;
|
||||
},
|
||||
error => { console.log('Error >> ',error); }
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
|
||||
<div class='itemDataTitle'>Edit Item</div>
|
||||
<div class='itemDataTitle'>{{ vE.itemeditEditItem }}</div>
|
||||
|
||||
<div class='container' style="margin-top: 20px;">
|
||||
<mat-dialog-content [formGroup]="form">
|
||||
<span style="line-height: 10px;"></span>
|
||||
<mat-form-field class="text" [style.width.%]="100">
|
||||
<mat-label>Item</mat-label>
|
||||
<mat-label>{{ vE.itemeditItemLabel}}</mat-label>
|
||||
<input type="hidden" formControlName="id">
|
||||
<input matInput
|
||||
placeholder="Item"
|
||||
|
@ -13,7 +13,7 @@
|
|||
maxlength="16">
|
||||
</mat-form-field >
|
||||
<mat-form-field class="text" [style.width.%]="100">
|
||||
<mat-label>Description</mat-label>
|
||||
<mat-label>{{ vE.itemeditItemDescr }}</mat-label>
|
||||
<textarea matInput
|
||||
placeholder="Description"
|
||||
formControlName="description"
|
||||
|
@ -22,7 +22,7 @@
|
|||
overflow:auto;"></textarea>
|
||||
</mat-form-field>
|
||||
<mat-form-field class="text" [style.width.%]="100">
|
||||
<mat-label>Price</mat-label>
|
||||
<mat-label>{{ vE.itemeditItemPrice }}</mat-label>
|
||||
<input matInput type="number" placeholder="Price" formControlName="cost">
|
||||
<div *ngIf="!form.controls['cost'].valid && form.controls['cost'].touched">
|
||||
<div *ngIf="form.controls['cost'].errors?.pattern">Use only numbers</div>
|
||||
|
@ -31,9 +31,11 @@
|
|||
</mat-dialog-content>
|
||||
|
||||
<div style="display: flex;
|
||||
justify-content: space-between;">
|
||||
<button mat-raised-button class="text" (click)="close()">Close</button>
|
||||
<button mat-raised-button class="text" color="primary" (click)="save()">Save</button>
|
||||
justify-content: space-between;
|
||||
margin-top: 20px;
|
||||
padding: 20px;">
|
||||
<button mat-raised-button class="text" (click)="close()">{{ vE.itemeditCloseBtn }}</button>
|
||||
<button mat-raised-button class="text" color="primary" (click)="save()">{{ vE.itemeditSaveBtn }}</button>
|
||||
</div>
|
||||
|
||||
</div>
|
|
@ -3,6 +3,8 @@ import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dial
|
|||
import { UntypedFormBuilder, Validators, UntypedFormGroup, UntypedFormControl } from '@angular/forms';
|
||||
import { Item } from '../item.model';
|
||||
|
||||
import { LanguageService } from '../../language.service';
|
||||
import { LanguageData } from '../../language.model';
|
||||
|
||||
@Component({
|
||||
selector: 'app-item-edit',
|
||||
|
@ -15,8 +17,21 @@ export class ItemEditComponent implements OnInit {
|
|||
form: UntypedFormGroup;
|
||||
id: string | undefined = '';
|
||||
numberRegEx = /\d*\.?\d{1,2}/;
|
||||
|
||||
//
|
||||
// Language Support
|
||||
//
|
||||
vE = {
|
||||
itemeditCloseBtn : '',
|
||||
itemeditEditItem : '',
|
||||
itemeditItemDescr : '',
|
||||
itemeditItemLabel : '',
|
||||
itemeditItemPrice : '',
|
||||
itemeditSaveBtn : ''
|
||||
}
|
||||
//
|
||||
// ------------------------------------------------------------
|
||||
constructor(
|
||||
private languageService : LanguageService,
|
||||
private fb: UntypedFormBuilder,
|
||||
private dialogRef: MatDialogRef<ItemEditComponent>,
|
||||
@Inject(MAT_DIALOG_DATA) public data: Item
|
||||
|
@ -46,6 +61,7 @@ export class ItemEditComponent implements OnInit {
|
|||
}
|
||||
|
||||
ngOnInit () {
|
||||
this.chgUILanguage();
|
||||
}
|
||||
|
||||
save() {
|
||||
|
@ -56,4 +72,25 @@ export class ItemEditComponent implements OnInit {
|
|||
close () {
|
||||
this.dialogRef.close();
|
||||
}
|
||||
|
||||
chgUILanguage(){
|
||||
console.log('ITEMEDIT.chgUILanguage Called ');
|
||||
this.languageService.getViewElements('itemedit').subscribe(
|
||||
response => {
|
||||
console.log('Received >> ', response );
|
||||
console.log('Language Code : ', response.language);
|
||||
console.log('Component Name : ',response.component);
|
||||
console.log('Language data : ',response.data);
|
||||
|
||||
this.vE.itemeditEditItem = response.data.itemedit_edit_item;
|
||||
this.vE.itemeditItemLabel = response.data.itemedit_item_label;
|
||||
this.vE.itemeditItemDescr = response.data.itemedit_item_descr;
|
||||
this.vE.itemeditItemPrice = response.data.itemedit_item_price;
|
||||
this.vE.itemeditCloseBtn = response.data.itemedit_close_btn;
|
||||
this.vE.itemeditSaveBtn = response.data.itemedit_save_btn;
|
||||
},
|
||||
error => { console.log('Error >> ',error); }
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,16 +1,19 @@
|
|||
<div *ngIf="items.length > 0">
|
||||
<div class="availableItems" >
|
||||
Available Items:
|
||||
<button mat-raised-button
|
||||
class="buttons-class"
|
||||
<mat-toolbar color="accent">
|
||||
<span align="center" class="text">
|
||||
{{ vE.itemlistAvailItems }}
|
||||
</span>
|
||||
<span class="spacer"></span>
|
||||
<span align="center">
|
||||
<button mat-icon-button
|
||||
color="primary"
|
||||
(click)="openDialog()">
|
||||
<mat-icon class="icon">
|
||||
<mat-icon aria-button-label="Add Item">
|
||||
add
|
||||
</mat-icon>
|
||||
Add item
|
||||
</button>
|
||||
|
||||
</div>
|
||||
</span>
|
||||
</mat-toolbar>
|
||||
<div style="display: block;
|
||||
overflow-y: auto;
|
||||
height: 500px;">
|
||||
|
@ -44,7 +47,7 @@
|
|||
</div>
|
||||
<p class="rv_price"
|
||||
*ngIf="owner.zats">
|
||||
ⓩ{{(item.cost/zecPrice)*100000000 | number: '1.0-0'}}
|
||||
ⓩ {{ ((item.cost/zecPrice)*100000000).toString().substring( 0, ((item.cost/zecPrice)*100000000 ).toString().indexOf('.')) }} [{{item.cost | number: '1.02' | currency: getCurrency() }}]
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
|
@ -54,18 +57,18 @@
|
|||
<tr>
|
||||
<td>
|
||||
<button mat-icon-button class="icons" (click)="edit(item._id!)">
|
||||
<mat-icon inline=true>edit</mat-icon>
|
||||
<mat-icon>edit</mat-icon>
|
||||
</button>
|
||||
<button mat-icon-button class="icons" (click)="delete(item._id!)">
|
||||
<mat-icon inline=true>delete</mat-icon>
|
||||
<mat-icon>delete</mat-icon>
|
||||
</button>
|
||||
</td>
|
||||
<td align="right">
|
||||
<button mat-raised-button
|
||||
<button mat-icon-button
|
||||
color="primary"
|
||||
class="buttons-class-cart"
|
||||
(click)="addToOrder(item._id!)">
|
||||
<mat-icon [inline]="true">
|
||||
<mat-icon>
|
||||
shopping_cart
|
||||
</mat-icon>
|
||||
</button>
|
||||
|
@ -79,7 +82,7 @@
|
|||
</div>
|
||||
<div *ngIf = "items.length <= 0">
|
||||
<div class="availableItems" >
|
||||
No items yet!
|
||||
{{ vE.itemlistListEmpty }}
|
||||
<button mat-raised-button
|
||||
class="buttons-class"
|
||||
(click)="openDialog()">
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { Input, Inject, Component, OnInit } from '@angular/core';
|
||||
import { Input, Component, OnInit } from '@angular/core';
|
||||
import { MatDialog, MatDialogConfig} from '@angular/material/dialog';
|
||||
|
||||
import { faCartShopping } from '@fortawesome/free-solid-svg-icons';
|
||||
|
@ -16,12 +16,14 @@ import { ItemDeleteComponent } from '../item-delete/item-delete.component';
|
|||
import { ItemAddComponent } from '../item-add/item-add.component';
|
||||
import { NotifierService } from '../../notifier.service';
|
||||
|
||||
import { LanguageService } from '../../language.service';
|
||||
|
||||
@Component({
|
||||
selector: 'app-item-list',
|
||||
templateUrl: './item-list.component.html',
|
||||
styleUrls: ['./item-list.component.css']
|
||||
})
|
||||
|
||||
|
||||
export class ItemListComponent implements OnInit{
|
||||
|
||||
@Input() zecPrice: number;
|
||||
|
@ -39,34 +41,42 @@ export class ItemListComponent implements OnInit{
|
|||
taxValue: 0,
|
||||
vat: false,
|
||||
vatValue: 0,
|
||||
first: '',
|
||||
last: '',
|
||||
email: '',
|
||||
street: '',
|
||||
city: '',
|
||||
state: '',
|
||||
postal: '',
|
||||
phone: '',
|
||||
paid: false,
|
||||
website: '',
|
||||
country: '',
|
||||
zats: false,
|
||||
invoices: false,
|
||||
expiration: new Date(Date.now()).toISOString(),
|
||||
payconf: false,
|
||||
viewkey: ''
|
||||
crmToken: '',
|
||||
viewkey: '',
|
||||
tips: false
|
||||
};
|
||||
|
||||
public ownerUpdate: Observable<Owner>;
|
||||
public itemsUpdate: Observable<Item[]>;
|
||||
|
||||
//
|
||||
// Language Support
|
||||
//
|
||||
vE = {
|
||||
itemlistAvailItems : '',
|
||||
itemlistListEmpty : '',
|
||||
itemlistItemAdded : '',
|
||||
itemlistItemUpdated : '',
|
||||
itemlistItemDeleted : '',
|
||||
itemlistNotifClose : '',
|
||||
itemlistNotifSuccess : ''
|
||||
}
|
||||
|
||||
//
|
||||
// ------------------------------------------------------------
|
||||
constructor(
|
||||
public itemService: ItemService,
|
||||
userService: UserService,
|
||||
public orderService: OrderService,
|
||||
public fullnodeService: FullnodeService,
|
||||
private dialog: MatDialog,
|
||||
private notifierService: NotifierService )
|
||||
private notifierService: NotifierService,
|
||||
private languageService: LanguageService )
|
||||
{
|
||||
this.ownerUpdate = userService.ownerUpdate;
|
||||
this.itemsUpdate = itemService.itemsUpdated;
|
||||
|
@ -81,6 +91,7 @@ export class ItemListComponent implements OnInit{
|
|||
}
|
||||
|
||||
ngOnInit(){
|
||||
this.chgUILanguage();
|
||||
this.itemsUpdate.subscribe((items) => {
|
||||
this.items = items;
|
||||
});
|
||||
|
@ -99,9 +110,12 @@ export class ItemListComponent implements OnInit{
|
|||
if(val != null) {
|
||||
var item:Item = {_id: '', name: val.name, description: val.description, cost: val.cost, owner: this.owner.address};
|
||||
this.itemService.addItem(item);
|
||||
//console.log('creando item y llamando a notifier >>>');
|
||||
this.notifierService
|
||||
.showNotification("Item successfully created!",
|
||||
"Close","success");
|
||||
.showNotification(this.vE.itemlistItemAdded ,
|
||||
this.vE.itemlistNotifClose,
|
||||
"success",
|
||||
this.vE.itemlistNotifSuccess);
|
||||
}
|
||||
this.itemService.getItems(this.owner.address);
|
||||
this.itemsUpdate.subscribe((items) => {
|
||||
|
@ -119,7 +133,7 @@ export class ItemListComponent implements OnInit{
|
|||
dialogConfig.disableClose = true;
|
||||
dialogConfig.autoFocus = true;
|
||||
dialogConfig.data = item;
|
||||
|
||||
//console.log('Entrando a dialogo de edicion')
|
||||
const dialogRef = this.dialog.open(ItemEditComponent, dialogConfig);
|
||||
dialogRef.afterClosed().subscribe((val) => {
|
||||
if (val != null) {
|
||||
|
@ -131,12 +145,15 @@ export class ItemListComponent implements OnInit{
|
|||
owner: this.owner.address
|
||||
};
|
||||
//console.log('Edit:', editItem);
|
||||
//console.log('itemlistItemUpdated = ' + this.vE.itemlistItemUpdated);
|
||||
this.itemService.addItem(editItem).subscribe((response) => {
|
||||
this.itemService.getItems(this.owner.address);
|
||||
});
|
||||
this.notifierService
|
||||
.showNotification("Item information updated!!",
|
||||
"Close","success");
|
||||
.showNotification(this.vE.itemlistItemUpdated,
|
||||
this.vE.itemlistNotifClose,
|
||||
"success",
|
||||
this.vE.itemlistNotifSuccess);
|
||||
}
|
||||
this.itemService.getItems(this.owner.address);
|
||||
});
|
||||
|
@ -159,8 +176,10 @@ export class ItemListComponent implements OnInit{
|
|||
this.itemService.deleteItem(val);
|
||||
this.items = [];
|
||||
this.notifierService
|
||||
.showNotification("Item deleted!!",
|
||||
"Close","success");
|
||||
.showNotification(this.vE.itemlistItemDeleted,
|
||||
this.vE.itemlistNotifClose,
|
||||
"success",
|
||||
this.vE.itemlistNotifSuccess);
|
||||
}
|
||||
this.itemService.getItems(this.owner.address);
|
||||
this.itemsUpdate.subscribe((items) => {
|
||||
|
@ -185,7 +204,7 @@ export class ItemListComponent implements OnInit{
|
|||
const dialogRef = this.dialog.open(ItemAddComponent, dialogConfig);
|
||||
dialogRef.afterClosed().subscribe((val) => {
|
||||
if (val != null) {
|
||||
console.log('Adding to order', val);
|
||||
//console.log('Adding to order', val);
|
||||
this.orderService.addToOrder(val);
|
||||
}
|
||||
this.itemService.getItems(this.owner.address);
|
||||
|
@ -195,5 +214,28 @@ export class ItemListComponent implements OnInit{
|
|||
getCurrency(){
|
||||
return this.owner.currency.toUpperCase();
|
||||
}
|
||||
|
||||
chgUILanguage(){
|
||||
//console.log('ITEMLIST.chgUILanguage Called ');
|
||||
this.languageService.getViewElements('itemlist').subscribe({next:
|
||||
response => {
|
||||
//console.log('Received >> ', response );
|
||||
//console.log('Language Code : ', response.language);
|
||||
//console.log('Component Name : ',response.component);
|
||||
//console.log('Language data : ',response.data);
|
||||
|
||||
this.vE.itemlistListEmpty = response.data.itemlist_list_empty;
|
||||
this.vE.itemlistAvailItems = response.data.itemlist_avail_items;
|
||||
this.vE.itemlistItemAdded = response.data.itemlist_item_added;
|
||||
this.vE.itemlistItemUpdated = response.data.itemlist_item_updated;
|
||||
this.vE.itemlistItemDeleted = response.data.itemlist_item_deleted;
|
||||
this.vE.itemlistNotifClose = response.data.itemlist_notif_close;
|
||||
this.vE.itemlistNotifSuccess = response.data.itemlist_notif_success;
|
||||
},
|
||||
error:
|
||||
error => { console.log('Error >> ',error); }
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import { Item } from './item.model';
|
||||
import { Injectable } from '@angular/core';
|
||||
import { Subject, BehaviorSubject, Observable } from 'rxjs';
|
||||
import { BehaviorSubject, Observable } from 'rxjs';
|
||||
import { HttpClient, HttpParams, HttpHeaders } from '@angular/common/http';
|
||||
|
||||
import { ConfigData } from '../configdata';
|
||||
|
@ -10,27 +10,29 @@ var Buffer = require('buffer/').Buffer;
|
|||
@Injectable({providedIn: 'root'})
|
||||
|
||||
export class ItemService{
|
||||
// beUrl = 'https://test.zgo.cash/';
|
||||
|
||||
beUrl = ConfigData.Be_URL;
|
||||
|
||||
// console.log(ConfigData.Be_URL);
|
||||
|
||||
private dataStore: { items: Item[] } = { items: [] } ;
|
||||
private _itemsUpdated: BehaviorSubject<Item[]> = new BehaviorSubject(this.dataStore.items);
|
||||
public readonly itemsUpdated: Observable<Item[]> = this._itemsUpdated.asObservable();
|
||||
private address:string = '';
|
||||
private reqHeaders: HttpHeaders;
|
||||
private session: null|string;
|
||||
private params: HttpParams;
|
||||
|
||||
constructor(private http: HttpClient){
|
||||
var auth = 'Basic ' + Buffer.from(ConfigData.UsrPwd).toString('base64');
|
||||
this.reqHeaders = new HttpHeaders().set('Authorization', auth);
|
||||
this.session = localStorage.getItem('s4z_token');
|
||||
this.params = new HttpParams().append('session', this.session!);
|
||||
}
|
||||
|
||||
getItems(addr: string){
|
||||
this.address = addr;
|
||||
const params = new HttpParams().append('address', addr);
|
||||
let obs = this.http.get<{message: string, items: any}>(this.beUrl+'api/items', { headers:this.reqHeaders, params: params, observe: 'response'});
|
||||
const newParams = this.params.append('address', addr);
|
||||
let obs = this.http.get<{message: string, items: any}>(this.beUrl+'api/items', { headers:this.reqHeaders, params: newParams, observe: 'response'});
|
||||
|
||||
obs.subscribe((ItemDataResponse) => {
|
||||
if (ItemDataResponse.status == 200 ) {
|
||||
|
@ -39,7 +41,6 @@ export class ItemService{
|
|||
} else {
|
||||
this.dataStore.items = [];
|
||||
this._itemsUpdated.next(Object.assign({},this.dataStore).items);
|
||||
// console.log('No items found');
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -47,11 +48,9 @@ export class ItemService{
|
|||
}
|
||||
|
||||
addItem(item: Item) {
|
||||
//const params = new HttpParams().append('item', JSON.stringify(item));
|
||||
let obs = this.http.post<{message: string}>(this.beUrl+'api/item', { payload: item }, { headers: this.reqHeaders });
|
||||
let obs = this.http.post<{message: string}>(this.beUrl+'api/item', { payload: item }, { headers: this.reqHeaders, params: this.params });
|
||||
|
||||
obs.subscribe((ItemResponse) => {
|
||||
// console.log('Item added');
|
||||
obs.subscribe(() => {
|
||||
this.getItems(this.address);
|
||||
});
|
||||
|
||||
|
@ -59,10 +58,9 @@ export class ItemService{
|
|||
}
|
||||
|
||||
deleteItem(id: string) {
|
||||
let obs = this.http.delete<{message: string}>(this.beUrl+'api/item/'+id, { headers: this.reqHeaders });
|
||||
let obs = this.http.delete<{message: string}>(this.beUrl+'api/item/'+id, { headers: this.reqHeaders, params: this.params });
|
||||
|
||||
obs.subscribe((ItemResponse) => {
|
||||
// console.log('Item deleted');
|
||||
obs.subscribe(() => {
|
||||
this.getItems(this.address);
|
||||
});
|
||||
|
||||
|
|
6
src/app/language.model.ts
Normal file
6
src/app/language.model.ts
Normal file
|
@ -0,0 +1,6 @@
|
|||
export interface LanguageData {
|
||||
_id: string;
|
||||
language: string;
|
||||
component: string;
|
||||
data?: any;
|
||||
}
|
16
src/app/language.service.spec.ts
Normal file
16
src/app/language.service.spec.ts
Normal file
|
@ -0,0 +1,16 @@
|
|||
import { TestBed } from '@angular/core/testing';
|
||||
|
||||
import { LanguageService } from './language.service';
|
||||
|
||||
describe('LanguageService', () => {
|
||||
let service: LanguageService;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({});
|
||||
service = TestBed.inject(LanguageService);
|
||||
});
|
||||
|
||||
it('should be created', () => {
|
||||
expect(service).toBeTruthy();
|
||||
});
|
||||
});
|
79
src/app/language.service.ts
Normal file
79
src/app/language.service.ts
Normal file
|
@ -0,0 +1,79 @@
|
|||
import { Injectable } from '@angular/core';
|
||||
import { LanguageData } from './language.model';
|
||||
import { HttpClient, HttpParams, HttpHeaders } from '@angular/common/http';
|
||||
import { ConfigData } from './configdata';
|
||||
|
||||
var Buffer = require('buffer/').Buffer;
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
})
|
||||
|
||||
export class LanguageService {
|
||||
//
|
||||
// URL for test using REST API to local MariaDB database
|
||||
// private baseURL = 'http://192.168.1.18:8080/zgointl';
|
||||
//
|
||||
// URL for test using REST API to local MongoDB database
|
||||
// private baseURL = 'http://localhost:5000/zgointl';
|
||||
//
|
||||
// URL for access MongoDB database from remote server
|
||||
private baseURL = ConfigData.Be_URL + 'api/getlang';
|
||||
private loginURL = ConfigData.Be_URL + 'getloginlang';
|
||||
private mainURL = ConfigData.Be_URL + 'getmainlang';
|
||||
private scanURL = ConfigData.Be_URL + 'getscanlang';
|
||||
private invoiceURL = ConfigData.Be_URL + 'getinvoicelang';
|
||||
private pmtservURL = ConfigData.Be_URL + 'getpmtservicelang';
|
||||
|
||||
public zgoLanguage: string = '';
|
||||
|
||||
private session: string|null = '';
|
||||
|
||||
constructor(private http:HttpClient) {
|
||||
this.session = localStorage.getItem('s4z_token');
|
||||
}
|
||||
|
||||
getViewElements ( viewName:string ) {
|
||||
//
|
||||
// Get default language from localStorage
|
||||
//
|
||||
const def_zgoLanguage = localStorage.getItem('zgo_language');
|
||||
//
|
||||
// Set authorizacion paramaters
|
||||
//
|
||||
const Auth = 'Basic ' + Buffer.from(ConfigData.UsrPwd).toString('base64');
|
||||
const reqHeaders = new HttpHeaders().set('Authorization', Auth);
|
||||
|
||||
if ( def_zgoLanguage == null ) {
|
||||
this.zgoLanguage = 'en-US';
|
||||
localStorage.setItem('zgo_language',this.zgoLanguage);
|
||||
} else {
|
||||
this.zgoLanguage = def_zgoLanguage;
|
||||
}
|
||||
//
|
||||
// Get component's text data from language database
|
||||
//
|
||||
const params = new HttpParams().append('session', this.session!);
|
||||
// console.log("Params -> ");
|
||||
// console.log(params);
|
||||
if (viewName === 'login') {
|
||||
return this.http.get<LanguageData>(this.loginURL + '/?lang=' + this.zgoLanguage, {headers: reqHeaders, params: params});
|
||||
} else if (viewName === 'main') {
|
||||
return this.http.get<LanguageData>(this.mainURL + '/?lang=' + this.zgoLanguage, {headers: reqHeaders, params: params});
|
||||
} else if (viewName === 'scan') {
|
||||
return this.http.get<LanguageData>(this.scanURL + '/?lang=' + this.zgoLanguage, {headers: reqHeaders, params: params});
|
||||
} else if (viewName === 'invoice') {
|
||||
return this.http.get<LanguageData>(this.invoiceURL + '/?lang=' + this.zgoLanguage, {headers: reqHeaders, params: params});
|
||||
} else if (viewName === 'pmtservice') {
|
||||
return this.http.get<LanguageData>(this.pmtservURL + '/?lang=' + this.zgoLanguage, {headers: reqHeaders, params: params});
|
||||
} else {
|
||||
return this.http.get<LanguageData>(this.baseURL +
|
||||
'/?lang=' + this.zgoLanguage +
|
||||
'&component=' + viewName
|
||||
,{ headers : reqHeaders
|
||||
, params: params
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -2,6 +2,20 @@
|
|||
font-family: 'Spartan', sans-serif;
|
||||
}
|
||||
|
||||
.text1{
|
||||
font-family: 'Spartan', sans-serif;
|
||||
font-size: 24px;
|
||||
font-weight: 700;
|
||||
padding-top: 15px;
|
||||
}
|
||||
|
||||
.text1a{
|
||||
font-family: 'Spartan', sans-serif;
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
padding-top: 10px;
|
||||
}
|
||||
|
||||
.text2 {
|
||||
font-family: 'Roboto Mono';
|
||||
font-size: 14px;
|
||||
|
@ -11,6 +25,10 @@
|
|||
background: lightgray;
|
||||
}
|
||||
|
||||
.icon{
|
||||
font-family: 'Material Icons';
|
||||
}
|
||||
|
||||
.orderheader {
|
||||
background-color: lightgrey !important;
|
||||
}
|
||||
|
@ -97,8 +115,8 @@ img.icon{
|
|||
}
|
||||
|
||||
.orderListTitle {
|
||||
font-family: 'Roboto Mono';
|
||||
font-size: 16px;
|
||||
font-family: 'Roboto Mono' !important;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
|
@ -110,12 +128,12 @@ img.icon{
|
|||
|
||||
.minibutton {
|
||||
font-family: 'Spartan', sans-serif;
|
||||
font-size: 12px;
|
||||
background: #ff5722;
|
||||
color: white;
|
||||
font-size: 14px;
|
||||
/*background: #ff5722;*/
|
||||
/*color: white;*/
|
||||
height: 24px;
|
||||
line-height: 20px;
|
||||
padding: 2px;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.spacer {
|
||||
|
|
|
@ -1,15 +1,44 @@
|
|||
<app-header></app-header>
|
||||
<div align="center">
|
||||
<h3 class="text">{{(ownerUpdate | async)!.name}}</h3>
|
||||
<button class="text" mat-raised-button [routerLink]="['/shop']" color="primary">
|
||||
Back to Shop
|
||||
</button>
|
||||
<div class="text1">{{(ownerUpdate | async)!.name}}</div>
|
||||
<table style="padding-top: 10px;
|
||||
padding-bottom: 10px;">
|
||||
<tr class="text1a">
|
||||
<td>
|
||||
{{ vE.listordersEndDate }}{{(ownerUpdate | async)!.expiration | date: 'YYYY-MM-dd'}}
|
||||
</td>
|
||||
<td>
|
||||
<button mat-icon-button color="primary" (click)="paySession()">
|
||||
<mat-icon class="icon">queue</mat-icon>
|
||||
</button>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<table >
|
||||
<tr>
|
||||
<td width="45%">
|
||||
<button class="text" mat-raised-button [routerLink]="['/shop']" color="primary">
|
||||
<mat-icon class="icon">home</mat-icon>
|
||||
{{ vE.listordersBacktoshopBtn }}
|
||||
</button>
|
||||
</td>
|
||||
<td width="10%">
|
||||
</td>
|
||||
<td width="45%">
|
||||
<button mat-raised-button color="primary"
|
||||
class="text" (click)="openDbExport()">
|
||||
<mat-icon class="icon">get_app</mat-icon>
|
||||
{{ vE.listordersExportOrders }}
|
||||
</button>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<table class="totalsTbl" width="100%">
|
||||
<tr class="totalsHdr">
|
||||
<td width="10%"></td>
|
||||
<td width="40%" >
|
||||
<div class="totalsHdrTitle">Today's Total:</div>
|
||||
<div class="totalsHdrTitle">{{ vE.listordersTodaysTotal }}</div>
|
||||
<div class="totalsHdrDetail">
|
||||
<img src="/assets/zec_rv.png"
|
||||
style="height: 16px !important;
|
||||
|
@ -17,7 +46,7 @@
|
|||
</div>
|
||||
</td>
|
||||
<td width="40%" >
|
||||
<div class="totalsHdrTitle">Overall Total:</div>
|
||||
<div class="totalsHdrTitle">{{ vE.listordersOverallTotal }}</div>
|
||||
<div class="totalsHdrDetail">
|
||||
<img src="/assets/zec_rv.png"
|
||||
style="height: 16px !important;
|
||||
|
@ -31,30 +60,35 @@
|
|||
<div class="orderList">
|
||||
<mat-accordion *ngIf = "orders.length > 0">
|
||||
<mat-expansion-panel *ngFor = "let order of orders">
|
||||
<mat-expansion-panel-header [collapsedHeight]="'30px'" [expandedHeight]="'30px'" >
|
||||
<mat-expansion-panel-header [collapsedHeight]="'35px'" [expandedHeight]="'30px'" >
|
||||
<mat-panel-title>
|
||||
<div class="orderListTitle">
|
||||
<img src="/assets/zec_rv.png"
|
||||
style="height: 16px;
|
||||
margin-bottom: -2px;"
|
||||
<div class="orderListTitle">
|
||||
<img src="/assets/zec_rv.png"
|
||||
style="height: 14px;
|
||||
margin-bottom: -2px;
|
||||
padding-right: 3px;"
|
||||
>{{order.totalZec | number: '1.08'}}
|
||||
</div>
|
||||
</div>
|
||||
</mat-panel-title>
|
||||
<mat-panel-description>
|
||||
<table width="100%">
|
||||
<tr>
|
||||
<td>
|
||||
<fa-icon [icon]="getIcon(order)" [style]="getIconStyle(order)" ></fa-icon>
|
||||
<td>
|
||||
<fa-icon *ngIf="payConf"
|
||||
[icon]="getIcon(order)" [style]="getIconStyle(order)" ></fa-icon>
|
||||
</td>
|
||||
<td align="center">
|
||||
{{order.timestamp | date: 'short'}}
|
||||
</td>
|
||||
<td align="center"
|
||||
style="font-family: 'Roboto Mono' !important;
|
||||
font-weight: 700 ;
|
||||
font-size: 14px;">
|
||||
{{order.timestamp | date: 'YYYY-MM-dd, HH:mm'}}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</mat-panel-description>
|
||||
</mat-expansion-panel-header>
|
||||
<div class='orderheader'>
|
||||
<div class="text2"> <b>Order Id</b>: {{order._id}}</div>
|
||||
<div class="text2"> <b>{{ vE.listordersOrderId }}</b>: {{order._id}}</div>
|
||||
</div>
|
||||
|
||||
<table style="width: 100%;"
|
||||
|
@ -63,7 +97,7 @@
|
|||
font-weight: 700;
|
||||
font-size: 16px;
|
||||
height: 20px;">
|
||||
<td width="50%">Order Total:</td>
|
||||
<td width="50%">{{ vE.listordersOrderTotal }}</td>
|
||||
<td align="right"
|
||||
width="50%">
|
||||
<img class="icon" src="/assets/zec_rv.png"
|
||||
|
@ -92,15 +126,15 @@
|
|||
<tr style="background: lightblue;">
|
||||
<th class="tbheader"
|
||||
style="text-align: left;"
|
||||
width="55%">Item
|
||||
width="55%">{{ vE.listordersItemLbl }}
|
||||
</th>
|
||||
<th class="tbheader"
|
||||
style="text-align: left;"
|
||||
width="15%">Qty.
|
||||
width="15%">{{ vE.listordersQtyLbl }}
|
||||
</th>
|
||||
<th class="tbheader"
|
||||
style="text-align: right;"
|
||||
width="30%">Total
|
||||
width="30%">{{ vE.listordersTotalLbl }}
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
@ -120,6 +154,24 @@
|
|||
width="30%">{{item.qty * item.cost | number:'1.02' | currency: order.currency.toUpperCase() }}
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="tbdetail" *ngIf="order.taxAmount > 0">
|
||||
<td class="newOrdertbdetail" style="text-align: right;">{{ vE.listordersTax }}</td>
|
||||
<td class="newOrdertbdetail" style="text-align: right;"></td>
|
||||
<td class="newOrdertbdetail" style="text-align: right;">{{ order.taxAmount | currency: order.currency.toUpperCase() }}</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr class="tbdetail" *ngIf="order.vatAmount > 0">
|
||||
<td class="newOrdertbdetail" style="text-align: right;">{{ vE.listordersVAT }}</td>
|
||||
<td class="newOrdertbdetail" style="text-align: right;"></td>
|
||||
<td class="newOrdertbdetail" style="text-align: right;">{{ order.vatAmount | currency: order.currency.toUpperCase() }}</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr class="tbdetail" *ngIf="order.tipAmount > 0">
|
||||
<td class="newOrdertbdetail" style="text-align: right;">{{ vE.listordersTip }}</td>
|
||||
<td class="newOrdertbdetail" style="text-align: right;"></td>
|
||||
<td class="newOrdertbdetail" style="text-align: right;">{{ order.tipAmount | currency: order.currency.toUpperCase() }}</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div style="display: flex;
|
||||
|
@ -128,13 +180,13 @@
|
|||
padding-right: 20%;
|
||||
margin-top: 10px;">
|
||||
<span>
|
||||
<button mat-stroked-button class="minibutton" color="primary" (click)="invoice(order)">Invoice</button>
|
||||
<button mat-raised-button class="minibutton" color="primary" (click)="invoice(order)">{{ vE.listordersInvoiceBtn }}</button>
|
||||
</span>
|
||||
<span>
|
||||
<button mat-stroked-button class="minibutton" color="primary" (click)="receipt(order)">Receipt</button>
|
||||
<button mat-raised-button class="minibutton" color="primary" (click)="receipt(order)">{{ vE.listordersReceiptBtn }}</button>
|
||||
</span>
|
||||
</div>
|
||||
</mat-expansion-panel>
|
||||
</mat-accordion>
|
||||
<p class="text" *ngIf = "orders.length <= 0">No orders</p>
|
||||
<p class="text" *ngIf = "orders.length <= 0">{{ vE.listordersNoOrders }}</p>
|
||||
</div>
|
||||
|
|
|
@ -4,11 +4,13 @@ import { Order } from '../order/order.model';
|
|||
import { FullnodeService } from '../fullnode.service';
|
||||
import { UserService } from '../user.service';
|
||||
import { Owner } from '../owner.model';
|
||||
import { User } from '../user.model';
|
||||
import { OrderService } from '../order/order.service';
|
||||
|
||||
import { MatDialog, MatDialogConfig} from '@angular/material/dialog';
|
||||
import { PromptInvoiceComponent } from '../prompt-invoice/prompt-invoice.component';
|
||||
import { PromptReceiptComponent } from '../prompt-receipt/prompt-receipt.component';
|
||||
import { DbExportComponent } from '../db-export/db-export.component';
|
||||
|
||||
import { faTimes } from '@fortawesome/free-solid-svg-icons';
|
||||
import { faTimesCircle } from '@fortawesome/free-solid-svg-icons';
|
||||
|
@ -17,6 +19,9 @@ import { faCheckCircle } from '@fortawesome/free-solid-svg-icons';
|
|||
import { faHourglass } from '@fortawesome/free-solid-svg-icons';
|
||||
import { faTrash } from '@fortawesome/free-solid-svg-icons';
|
||||
|
||||
import { LanguageService } from '../language.service';
|
||||
import {SessionpayComponent} from '../sessionpay/sessionpay.component';
|
||||
|
||||
@Component({
|
||||
selector: 'app-list-orders',
|
||||
templateUrl: './listorders.component.html',
|
||||
|
@ -30,7 +35,7 @@ export class ListOrdersComponent implements OnInit, OnDestroy{
|
|||
public orders: Order[] = [];
|
||||
public ownerUpdate: Observable<Owner>;
|
||||
public ordersUpdate: Observable<Order[]>;
|
||||
|
||||
|
||||
|
||||
// ------------------------------------
|
||||
//
|
||||
|
@ -40,28 +45,99 @@ export class ListOrdersComponent implements OnInit, OnDestroy{
|
|||
faCheckCircle = faCheckCircle;
|
||||
faHourglass = faHourglass;
|
||||
faTrash = faTrash;
|
||||
payConf : boolean = false;
|
||||
owner : Owner = {
|
||||
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: '',
|
||||
tips: false
|
||||
};
|
||||
zecPrice: number = 1;
|
||||
nodeAddress: string = '';
|
||||
session: string = '';
|
||||
addrUpdate: Observable<string>;
|
||||
priceUpdate: Observable<number>;
|
||||
userUpdate: Observable<User>;
|
||||
// -------------------------------------
|
||||
|
||||
|
||||
// -------------------------------------
|
||||
//
|
||||
// Language Support
|
||||
//
|
||||
vE = {
|
||||
listordersBacktoshopBtn : '',
|
||||
listordersExportOrders : '',
|
||||
listordersTodaysTotal : '',
|
||||
listordersOverallTotal : '',
|
||||
listordersOrderTotal : '',
|
||||
listordersOrderId : '',
|
||||
listordersItemLbl : '',
|
||||
listordersQtyLbl : '',
|
||||
listordersTotalLbl : '',
|
||||
listordersInvoiceBtn : '',
|
||||
listordersReceiptBtn : '',
|
||||
listordersNoOrders : '',
|
||||
listordersEndDate : '',
|
||||
listordersTax : '',
|
||||
listordersVAT : '',
|
||||
listordersTip : ''
|
||||
}
|
||||
//
|
||||
|
||||
constructor(
|
||||
private languageService : LanguageService,
|
||||
public orderService: OrderService,
|
||||
public userService: UserService,
|
||||
public fullnodeService: FullnodeService,
|
||||
private dialog: MatDialog)
|
||||
{
|
||||
this.ownerUpdate = userService.ownerUpdate;
|
||||
this.userUpdate = userService.userUpdate;
|
||||
this.orderService.getAllOrders();
|
||||
this.ordersUpdate = orderService.allOrdersUpdate;
|
||||
this.addrUpdate = fullnodeService.addrUpdate;
|
||||
this.priceUpdate = fullnodeService.priceUpdate;
|
||||
this.priceUpdate.subscribe(price => {
|
||||
this.zecPrice = price;
|
||||
});
|
||||
this.addrUpdate.subscribe(nAddress => {
|
||||
this.nodeAddress = nAddress;
|
||||
});
|
||||
this.userUpdate.subscribe(user => {
|
||||
this.session = user.session;
|
||||
});
|
||||
}
|
||||
|
||||
ngOnInit(){
|
||||
// console.log('listOrders Init -->');
|
||||
this.chgUILanguage();
|
||||
this.owner = this.userService.currentOwner();
|
||||
// console.log(this.owner.name);
|
||||
this.payConf = this.owner.payconf;
|
||||
// this.payConf = true;
|
||||
// console.log('payConf = ', this.payConf);
|
||||
|
||||
this.ordersUpdate.subscribe((orders) => {
|
||||
this.total = 0;
|
||||
this.todayTotal = 0;
|
||||
var today = new Date();
|
||||
this.orders = orders;
|
||||
|
||||
//console.log(this.ownerUpdate);
|
||||
for (let i=0; i < this.orders.length; i++){
|
||||
this.total += this.orders[i].totalZec;
|
||||
//
|
||||
|
||||
var date = new Date(this.orders[i]!.timestamp!);
|
||||
var diff = (today.getTime() / 1000) - (date.getTime()/1000);
|
||||
if (diff < (24*3600)){
|
||||
|
@ -101,7 +177,8 @@ export class ListOrdersComponent implements OnInit, OnDestroy{
|
|||
dialogConfig.disableClose = true;
|
||||
dialogConfig.autoFocus = true;
|
||||
dialogConfig.data = {
|
||||
orderId: order._id
|
||||
orderId: order._id,
|
||||
orderToken: order.token
|
||||
};
|
||||
|
||||
const dialogRef = this.dialog.open(PromptInvoiceComponent, dialogConfig);
|
||||
|
@ -122,7 +199,8 @@ export class ListOrdersComponent implements OnInit, OnDestroy{
|
|||
dialogConfig.disableClose = true;
|
||||
dialogConfig.autoFocus = true;
|
||||
dialogConfig.data = {
|
||||
orderId: order._id
|
||||
orderId: order._id,
|
||||
orderToken: order.token
|
||||
};
|
||||
|
||||
const dialogRef = this.dialog.open(PromptReceiptComponent, dialogConfig);
|
||||
|
@ -131,4 +209,64 @@ export class ListOrdersComponent implements OnInit, OnDestroy{
|
|||
});
|
||||
}
|
||||
|
||||
openDbExport(){
|
||||
const dialogConfig = new MatDialogConfig();
|
||||
|
||||
//console.log('openDbExport ---');
|
||||
|
||||
dialogConfig.disableClose = false;
|
||||
dialogConfig.autoFocus = true;
|
||||
dialogConfig.data = this.owner;
|
||||
|
||||
const dialogRef = this.dialog.open(DbExportComponent, dialogConfig);
|
||||
dialogRef.afterClosed().subscribe((val) => {
|
||||
console.log('Returning to order list');
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
chgUILanguage(){
|
||||
//console.log('LISTORDERS.chgUILanguage Called ');
|
||||
this.languageService.getViewElements('listorders').subscribe({
|
||||
next: response => {
|
||||
//console.log('Received >> ', response );
|
||||
//console.log('Language Code : ', response.language);
|
||||
//console.log('Component Name : ',response.component);
|
||||
//console.log('Language data : ',response.data);
|
||||
|
||||
this.vE.listordersBacktoshopBtn = response.data.listorders_backtoshop_btn;
|
||||
this.vE.listordersExportOrders = response.data.listorders_export_orders;
|
||||
this.vE.listordersTodaysTotal = response.data.listorders_todays_total;
|
||||
this.vE.listordersOverallTotal = response.data.listorders_overall_total;
|
||||
this.vE.listordersOrderId = response.data.listorders_order_id;
|
||||
this.vE.listordersOrderTotal = response.data.listorders_order_total;
|
||||
this.vE.listordersItemLbl = response.data.listorders_item_lbl;
|
||||
this.vE.listordersQtyLbl = response.data.listorders_qty_lbl;
|
||||
this.vE.listordersTotalLbl = response.data.listorders_total_lbl;
|
||||
this.vE.listordersInvoiceBtn = response.data.listorders_invoice_btn;
|
||||
this.vE.listordersReceiptBtn = response.data.listorders_receipt_btn;
|
||||
this.vE.listordersNoOrders = response.data.listorders_no_orders;
|
||||
this.vE.listordersEndDate = response.data.listorders_end_date;
|
||||
this.vE.listordersTax = response.data.listorders_tax;
|
||||
this.vE.listordersVAT = response.data.listorders_vat;
|
||||
this.vE.listordersTip = response.data.listorders_tip;
|
||||
|
||||
},
|
||||
error: error => { console.log('Error >> ',error); }
|
||||
});
|
||||
}
|
||||
|
||||
paySession() {
|
||||
const dialogConfig = new MatDialogConfig();
|
||||
|
||||
dialogConfig.disableClose = true;
|
||||
dialogConfig.autoFocus = true;
|
||||
dialogConfig.data = {
|
||||
addr: this.nodeAddress,
|
||||
session: this.session,
|
||||
zecPrice: this.zecPrice
|
||||
};
|
||||
|
||||
const dialogRef = this.dialog.open(SessionpayComponent, dialogConfig);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,10 +5,13 @@ mat-card.coolcard{
|
|||
background-color: #FF5722;
|
||||
color: #FFFFFF;
|
||||
margin: 5px;
|
||||
width: 90%;
|
||||
justify-content: center;
|
||||
}
|
||||
mat-card.centercard{
|
||||
max-width: 450px;
|
||||
border: 1px solid #CCCCCC;
|
||||
justify-content: center;
|
||||
}
|
||||
.icon{
|
||||
font-family: 'Material Icons';
|
||||
|
|
|
@ -1,44 +1,42 @@
|
|||
<div align="center" class="text">
|
||||
<mat-card class="coolcard">
|
||||
<img src="/assets/logo-new-white.png" height="120px" />
|
||||
<p class="text">Last block seen: <span class="numbers">{{ heightUpdate | async }}</span></p>
|
||||
<mat-card-content>
|
||||
<img mat-card-image src="/assets/logo-new-white_01.png" height="120px" />
|
||||
<p class="text">{{ vE.loginLastBlock }}<span class="numbers"> {{ heightUpdate | async }}</span></p>
|
||||
</mat-card-content>
|
||||
</mat-card>
|
||||
</div>
|
||||
<div align="center">
|
||||
<mat-card class="centercard">
|
||||
<h3>The Zcash Register</h3>
|
||||
<mat-vertical-stepper #stepper linear>
|
||||
<mat-step label="Connect your wallet to ZGo" editable="false">
|
||||
<mat-card>
|
||||
<div align="center" id="info">
|
||||
<mat-card-actions>
|
||||
<button mat-raised-button color="primary" (click)="login(stepper)">
|
||||
<mat-icon class="icon">login</mat-icon><span class="bigbutton">Link wallet</span>
|
||||
</button>
|
||||
</mat-card-actions>
|
||||
</div>
|
||||
</mat-card>
|
||||
<mat-step label= "{{ vE.loginConnectToZGo }}" editable="false">
|
||||
<div align="center" id="info">
|
||||
<button mat-raised-button color="primary" (click)="login(stepper)">
|
||||
<mat-icon class="icon">login</mat-icon><span class="bigbutton">{{ vE.loginLinkWallet }}</span>
|
||||
</button>
|
||||
</div>
|
||||
</mat-step>
|
||||
<mat-step label="ZGo confirms your login on the Zcash blockhain:" editable="false">
|
||||
<mat-step label="{{ vE.loginConfirmLogin }}" editable="false">
|
||||
<p>{{barMessage}}</p>
|
||||
<mat-progress-bar
|
||||
[mode]="barMode"
|
||||
[value]="barValue">
|
||||
</mat-progress-bar>
|
||||
</mat-step>
|
||||
<mat-step label="Enter the PIN sent by ZGo to confirm wallet ownership:">
|
||||
<mat-step label="{{ vE.loginEnterPin }}">
|
||||
<mat-card [formGroup]="pinForm">
|
||||
<h4>
|
||||
Check your wallet
|
||||
{{ vE.loginCheckWallet}}
|
||||
</h4>
|
||||
<mat-form-field appearance="outline">
|
||||
<mat-label>PIN</mat-label>
|
||||
<input matInput formControlName="pinValue">
|
||||
</mat-form-field>
|
||||
<p *ngIf="pinError">Wrong pin!</p>
|
||||
<p *ngIf="pinError">{{ vE.loginWrongPin }}</p>
|
||||
<mat-card-actions>
|
||||
<button mat-raised-button color="primary" [disabled]="!pinForm.valid" (click)="confirmPin()">
|
||||
Confirm
|
||||
{{ vE.loginConfirmPin }}
|
||||
</button>
|
||||
</mat-card-actions>
|
||||
</mat-card>
|
||||
|
|
|
@ -1,22 +1,19 @@
|
|||
import { Component, OnInit, OnDestroy, Injectable, ChangeDetectorRef, ViewChild, AfterViewInit } from '@angular/core';
|
||||
import { CanActivate, Router, RouterStateSnapshot, ActivatedRouteSnapshot, ActivatedRoute } from '@angular/router';
|
||||
import { Component, OnInit, ChangeDetectorRef, ViewChild, AfterViewInit } from '@angular/core';
|
||||
import { Router, ActivatedRoute } from '@angular/router';
|
||||
import { MatDialog, MatDialogConfig} from '@angular/material/dialog';
|
||||
import { UntypedFormBuilder, Validators, UntypedFormGroup, FormControl } from '@angular/forms';
|
||||
import { UntypedFormBuilder, Validators, UntypedFormGroup } from '@angular/forms';
|
||||
import { ProgressBarMode } from '@angular/material/progress-bar';
|
||||
import { MatStepper } from '@angular/material/stepper';
|
||||
import { UserService } from '../user.service';
|
||||
import { FullnodeService } from '../fullnode.service';
|
||||
import { ScanComponent} from '../scan/scan.component';
|
||||
import { Tx } from '../tx.model';
|
||||
import {User} from '../user.model';
|
||||
import { User } from '../user.model';
|
||||
import { Owner } from '../owner.model';
|
||||
import { Subscription, Observable } from 'rxjs';
|
||||
import { take } from 'rxjs/operators';
|
||||
import { v4 as uuidv4 } from 'uuid';
|
||||
var QRCode = require('easyqrcodejs');
|
||||
var URLSafeBase64 = require('urlsafe-base64');
|
||||
var Buffer = require('buffer/').Buffer;
|
||||
|
||||
import { LanguageService } from '../language.service';
|
||||
|
||||
@Component({
|
||||
selector: 'app-login',
|
||||
|
@ -46,42 +43,22 @@ export class LoginComponent implements OnInit, AfterViewInit {
|
|||
taxValue:0,
|
||||
vat: false,
|
||||
vatValue: 0,
|
||||
first: '',
|
||||
last: '',
|
||||
email: '',
|
||||
street: '',
|
||||
city: '',
|
||||
state: '',
|
||||
postal: '',
|
||||
phone: '',
|
||||
paid: false,
|
||||
website: '',
|
||||
country: '',
|
||||
zats: false,
|
||||
invoices: false,
|
||||
expiration: new Date(Date.now()).toISOString(),
|
||||
payconf: false,
|
||||
viewkey: ''
|
||||
crmToken: '',
|
||||
viewkey: '',
|
||||
tips: false
|
||||
};
|
||||
private FullnodeSub: Subscription = new Subscription();
|
||||
private UserSub: Subscription = new Subscription();
|
||||
public heightUpdate: Observable<number>;
|
||||
public uZaddrUpdate: Observable<string>;
|
||||
public userUpdate:Observable<User>;
|
||||
public ownerUpdate:Observable<Owner>;
|
||||
public txsUpdate: Observable<Tx[]>;
|
||||
tickets = [
|
||||
{
|
||||
value: 0.001,
|
||||
viewValue: '1 hour: 0.001 ZEC'
|
||||
},{
|
||||
value: 0.005,
|
||||
viewValue: '1 day: 0.005 ZEC'
|
||||
},{
|
||||
value: 0.025,
|
||||
viewValue: '1 week: 0.025 ZEC'
|
||||
}
|
||||
];
|
||||
public userUpdate: Observable<User>;
|
||||
public ownerUpdate: Observable<Owner>;
|
||||
//public txsUpdate: Observable<Tx[]>;
|
||||
prompt: boolean = false;
|
||||
confirmedMemo: boolean = false;
|
||||
targetBlock: number = 0;
|
||||
|
@ -90,10 +67,23 @@ export class LoginComponent implements OnInit, AfterViewInit {
|
|||
barMessage = 'Scanning blockchain for login memo, please wait.';
|
||||
@ViewChild('stepper') private myStepper?: MatStepper;
|
||||
|
||||
entryForm: UntypedFormGroup;
|
||||
pinForm: UntypedFormGroup;
|
||||
|
||||
|
||||
//
|
||||
// Language Support
|
||||
//
|
||||
vE = {
|
||||
loginConfirmLogin : '',
|
||||
loginConnectToZGo : '',
|
||||
loginEnterPin : '',
|
||||
loginLastBlock : '',
|
||||
loginLinkWallet : '',
|
||||
loginCheckWallet : '',
|
||||
loginWrongPin : '',
|
||||
loginConfirmPin : ''
|
||||
}
|
||||
//
|
||||
// ------------------------------------------------------------
|
||||
constructor(
|
||||
private fb: UntypedFormBuilder,
|
||||
private activatedRoute: ActivatedRoute,
|
||||
|
@ -101,12 +91,11 @@ export class LoginComponent implements OnInit, AfterViewInit {
|
|||
private router: Router,
|
||||
public userService: UserService,
|
||||
private dialog: MatDialog,
|
||||
private _changeDetectorRef: ChangeDetectorRef
|
||||
private _changeDetectorRef: ChangeDetectorRef,
|
||||
private languageService: LanguageService
|
||||
){
|
||||
|
||||
//this.fullnodeService.getAddr();
|
||||
this.entryForm = fb.group({
|
||||
selectedSession: [0.001, Validators.required]
|
||||
});
|
||||
this.pinForm = fb.group({
|
||||
pinValue: [null, Validators.required]
|
||||
});
|
||||
|
@ -120,13 +109,14 @@ export class LoginComponent implements OnInit, AfterViewInit {
|
|||
this.ownerUpdate.subscribe((owner) => {
|
||||
this.owner = owner;
|
||||
});
|
||||
this.txsUpdate = userService.txUpdate;
|
||||
this.txsUpdate.subscribe((txs) => {
|
||||
this.txs = txs;
|
||||
});
|
||||
//this.txsUpdate = userService.txUpdate;
|
||||
//this.txsUpdate.subscribe((txs) => {
|
||||
//this.txs = txs;
|
||||
//});
|
||||
}
|
||||
|
||||
ngAfterViewInit(){
|
||||
|
||||
//console.log('Step', this.myStepper);
|
||||
this.pinError = false;
|
||||
//console.log('Activated route data in Component:::', this.activatedRoute.data);
|
||||
|
@ -146,36 +136,38 @@ export class LoginComponent implements OnInit, AfterViewInit {
|
|||
}
|
||||
|
||||
ngOnInit(){
|
||||
this.chgUILanguage();
|
||||
this.intervalHolder = setInterval(() => {
|
||||
this.fullnodeService.getHeight();
|
||||
//this.userService.findUser();
|
||||
this.loginCheck();
|
||||
this._changeDetectorRef.markForCheck();
|
||||
}, 1000 * 60);
|
||||
}
|
||||
|
||||
loginCheck(){
|
||||
this.userService.findUser();
|
||||
this.userUpdate.subscribe((user) => {
|
||||
if (user.blocktime > 0) {
|
||||
if(this.myStepper!.selectedIndex === 0) {
|
||||
this.myStepper!.next();
|
||||
this.myStepper!.next();
|
||||
} else {
|
||||
if(this.myStepper!.selectedIndex === 1){
|
||||
this.userService.checkUser()!.subscribe({
|
||||
next: (checkResponse) => {
|
||||
if (checkResponse.status == 200) {
|
||||
console.log('checkUser true');
|
||||
if(this.myStepper!.selectedIndex === 0) {
|
||||
this.myStepper!.next();
|
||||
this.myStepper!.next();
|
||||
}
|
||||
}
|
||||
//console.log('Log in found in blockchain!');
|
||||
if (user.validated) {
|
||||
clearInterval(this.intervalHolder);
|
||||
if (this.owner.paid) {
|
||||
this.router.navigate(['/shop']);
|
||||
} else {
|
||||
if(this.myStepper!.selectedIndex === 1){
|
||||
this.myStepper!.next();
|
||||
}
|
||||
}
|
||||
if(checkResponse.body!.validated) {
|
||||
console.log('redirecting to biz');
|
||||
this.userService.getOwner();
|
||||
this.router.navigate(['/biz']);
|
||||
clearInterval(this.intervalHolder);
|
||||
} else {
|
||||
console.log('validated failed');
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
error: (error) => {console.log(error);}
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -217,4 +209,26 @@ export class LoginComponent implements OnInit, AfterViewInit {
|
|||
this.UserSub.unsubscribe();
|
||||
clearInterval(this.intervalHolder);
|
||||
}
|
||||
|
||||
chgUILanguage(){
|
||||
//console.log('LOGIN.chgUILanguage Called ');
|
||||
this.languageService.getViewElements('login').subscribe(
|
||||
response => {
|
||||
//console.log('Received >> ', response );
|
||||
//console.log('Language Code : ', response.language);
|
||||
//console.log('Component Name : ',response.component);
|
||||
//console.log('Language data : ',response.data);
|
||||
|
||||
this.vE.loginLastBlock = response.data.login_last_block;
|
||||
this.vE.loginConnectToZGo = response.data.login_connect_to_zgo;
|
||||
this.vE.loginLinkWallet = response.data.login_link_wallet;
|
||||
this.vE.loginConfirmLogin = response.data.login_confirm_login;
|
||||
this.vE.loginEnterPin = response.data.login_enter_pin;
|
||||
this.vE.loginCheckWallet = response.data.login_check_wallet;
|
||||
this.vE.loginWrongPin = response.data.login_wrong_pin;
|
||||
this.vE.loginConfirmPin = response.data.login_confirm_pin;
|
||||
},
|
||||
error => { console.log('Error >> ',error); }
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { Injectable } from '@angular/core';
|
||||
import { ActivatedRouteSnapshot, Resolve } from '@angular/router';
|
||||
import { ActivatedRouteSnapshot } from '@angular/router';
|
||||
import { Observable, of } from 'rxjs';
|
||||
import { catchError } from 'rxjs/operators';
|
||||
|
||||
|
@ -9,13 +9,13 @@ import { FullnodeService} from './fullnode.service';
|
|||
providedIn: 'root'
|
||||
})
|
||||
|
||||
export class NodeResolverService implements Resolve<any> {
|
||||
export class NodeResolverService {
|
||||
constructor(private fullnode: FullnodeService) {}
|
||||
|
||||
resolve(route: ActivatedRouteSnapshot): Observable<any> {
|
||||
console.log('Called getAddr in resolver...', route);
|
||||
//console.log('Called getAddr in resolver...', route);
|
||||
return this.fullnode.getAddr().pipe(
|
||||
catchError(error => {
|
||||
catchError(() => {
|
||||
return of('No data');
|
||||
})
|
||||
);
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import { Injectable } from '@angular/core';
|
||||
import { MatSnackBar } from '@angular/material/snack-bar';
|
||||
import { MatSnackBar, MatSnackBarHorizontalPosition,
|
||||
MatSnackBarVerticalPosition } from '@angular/material/snack-bar';
|
||||
import { NotifierComponent } from './notifier/notifier.component';
|
||||
|
||||
@Injectable({
|
||||
|
@ -7,19 +8,33 @@ import { NotifierComponent } from './notifier/notifier.component';
|
|||
})
|
||||
export class NotifierService {
|
||||
|
||||
constructor(private snackBar:MatSnackBar) { }
|
||||
constructor(public snackBar:MatSnackBar,
|
||||
) { }
|
||||
|
||||
showNotification(displayMessage:string, buttonText: string, messageType: 'error' | 'success') {
|
||||
showNotification(displayMessage:string,
|
||||
buttonText: string,
|
||||
messageType: 'error' | 'success' | 'warning',
|
||||
messageTypeStr : string = '') {
|
||||
this.snackBar.openFromComponent(NotifierComponent, {
|
||||
data: {
|
||||
message: displayMessage,
|
||||
buttonText: buttonText,
|
||||
type : messageType
|
||||
type : messageType,
|
||||
typelbl : messageTypeStr
|
||||
},
|
||||
duration: 4000,
|
||||
verticalPosition: 'top',
|
||||
panelClass: [messageType]
|
||||
})
|
||||
panelClass: [messageType],
|
||||
});
|
||||
this.playSound();
|
||||
}
|
||||
|
||||
playSound() {
|
||||
// console.log('Play sound called...');
|
||||
let audio = new Audio();
|
||||
audio.src = '../assets/notifier_1.mp3';
|
||||
audio.load();
|
||||
audio.play();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
BIN
src/app/notifier/notifier..wav
Normal file
BIN
src/app/notifier/notifier..wav
Normal file
Binary file not shown.
|
@ -1,31 +1,42 @@
|
|||
|
||||
.notifier {
|
||||
font-family: 'Spartan', sans-serif;
|
||||
color: black;
|
||||
font-size: 16px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.notifier-type {
|
||||
border: 2px solid;
|
||||
border-color: lightcoral;
|
||||
background: #ff5722;
|
||||
font-size: 26px;
|
||||
font-weight: 700;
|
||||
height: 30px;
|
||||
color: white;
|
||||
.notifier {
|
||||
margin-top: 10px;
|
||||
font-family: 'Spartan' sans-serif;
|
||||
justify-content: center;
|
||||
text-align: center;
|
||||
align-items: center;
|
||||
vertical-align: center;
|
||||
}
|
||||
|
||||
::ng-deep .mat-snack-bar-container.error {
|
||||
background: antiquewhite;
|
||||
.notifier-type {
|
||||
font-size: 30px;
|
||||
font-weight: 700;
|
||||
height: 40px;
|
||||
color: #ff5722;
|
||||
}
|
||||
|
||||
.notifier-msg {
|
||||
font-size: 16px;
|
||||
font-weight: 700;
|
||||
color: black;
|
||||
height: 60px;
|
||||
margin-bottom: 20 !important;
|
||||
}
|
||||
|
||||
::ng-deep .mat-mdc-snack-bar-container.error {
|
||||
--mdc-snackbar-container-color: navajowhite;
|
||||
background-color: navajowhite;
|
||||
color: red;
|
||||
}
|
||||
|
||||
::ng-deep .mat-snack-bar-container.success {
|
||||
background: whitesmoke;
|
||||
::ng-deep .mat-mdc-snack-bar-container.success {
|
||||
--mdc-snackbar-container-color: whitesmoke;
|
||||
background-color: whitesmoke;
|
||||
color: black;
|
||||
}
|
||||
|
||||
::ng-deep .mat-mdc-snack-bar-container.warning {
|
||||
--mdc-snackbar-container-color: antiquewhite;
|
||||
background-color: antiquewhite;
|
||||
color: black;
|
||||
|
||||
}
|
|
@ -1,10 +1,10 @@
|
|||
<div class="notifier" >
|
||||
<div class="notifier">
|
||||
<div class="notifier-type">
|
||||
{{ data.type | titlecase }}
|
||||
{{ data.typelbl | titlecase }}
|
||||
</div>
|
||||
<p>
|
||||
<div class="notifier-msg">
|
||||
{{ data.message }}
|
||||
</p>
|
||||
</div>
|
||||
<div >
|
||||
<button mat-flat-button (click)="sbRef.dismiss()"
|
||||
style="justify-content: center;
|
||||
|
@ -13,4 +13,4 @@
|
|||
{{ data.buttonText }}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -4,7 +4,7 @@ import { MAT_SNACK_BAR_DATA, MatSnackBarRef } from '@angular/material/snack-bar'
|
|||
@Component({
|
||||
selector: 'app-notifier',
|
||||
templateUrl: './notifier.component.html',
|
||||
styleUrls: ['./notifier.component.css']
|
||||
styleUrls: ['./notifier.component.css'],
|
||||
})
|
||||
|
||||
export class NotifierComponent implements OnInit {
|
||||
|
@ -15,6 +15,7 @@ export class NotifierComponent implements OnInit {
|
|||
) {}
|
||||
|
||||
ngOnInit(): void {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -55,8 +55,8 @@ img.icon{
|
|||
background-color: #ff5722;
|
||||
color: white;
|
||||
font-weight: 500;
|
||||
height: 25px !important;
|
||||
width: 80px !important;
|
||||
height: 30px !important;
|
||||
width: 115px !important;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
|
@ -67,8 +67,8 @@ img.icon{
|
|||
.button-cancel-class {
|
||||
font-family: 'Spartan', sans-serif;
|
||||
font-weight: 500;
|
||||
height: 25px !important;
|
||||
width: 80px !important;
|
||||
height: 30px !important;
|
||||
width: 100px !important;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<div class="noOrderMsg"
|
||||
*ngIf="order.address.length == 0">
|
||||
No open order!
|
||||
{{ vE.orderNoOpenorder }}
|
||||
</div>
|
||||
<mat-card style="margin-top: 10px;" *ngIf="order.address.length" >
|
||||
|
||||
|
@ -9,7 +9,7 @@
|
|||
<table style="width: 100%;"
|
||||
cellspacing="0">
|
||||
<tr class="newOrderTitle1">
|
||||
<td width="50%">Order Total:</td>
|
||||
<td width="50%">{{ vE.orderTotalTitle }}</td>
|
||||
<td align="right"
|
||||
width="50%">
|
||||
<img class="icon" src="/assets/zec_rv.png"
|
||||
|
@ -36,15 +36,15 @@
|
|||
<tr style="background: lightblue;">
|
||||
<th class="newOrdertbheader"
|
||||
style="text-align: left;"
|
||||
width="50%">Item
|
||||
width="50%">{{ vE.orderItemLbl }}
|
||||
</th>
|
||||
<th class="newOrdertbheader"
|
||||
style="text-align: left;"
|
||||
width="15%">Qty.
|
||||
width="15%">{{ vE.orderQtyLbl }}.
|
||||
</th>
|
||||
<th class="newOrdertbheader"
|
||||
style="text-align: right;"
|
||||
width="30%">Total
|
||||
width="30%">{{ vE.orderTotalLbl }}
|
||||
</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
|
@ -75,11 +75,23 @@
|
|||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr *ngIf="tax > 0">
|
||||
<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;">{{ order.taxAmount | currency: getCurrency() }}</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr *ngIf="vat > 0">
|
||||
<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;">{{ order.vatAmount | currency: getCurrency() }}</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="container" style="margin: 2px;
|
||||
height: 35px;
|
||||
height: 40px;
|
||||
background: lightblue;
|
||||
border-top: 2px solid lightgray;
|
||||
border-bottom: 2px solid lightgray;
|
||||
|
@ -89,28 +101,26 @@
|
|||
<mat-card-actions>
|
||||
-->
|
||||
<table style="margin-top: 4px;" cellspacing="0" width="100%">
|
||||
<tr style="height: 16px;
|
||||
<tr style="height: 30px;
|
||||
margin-top: 10px">
|
||||
<td>
|
||||
<button mat-raised-button
|
||||
class="button-cancel-class"
|
||||
(click)="cancelOrder()">
|
||||
Cancel
|
||||
{{ vE.orderCancelBtn }}
|
||||
</button>
|
||||
</td>
|
||||
<td>
|
||||
<button mat-raised-button
|
||||
class="buttons-class"
|
||||
(click)="invoice()">
|
||||
<fa-icon [icon]="faInvoice" ></fa-icon> Invoice
|
||||
</button>
|
||||
<fa-icon [icon]="faInvoice" ></fa-icon> {{vE.orderInvoiceBtn}}</button>
|
||||
</td>
|
||||
<td align="right">
|
||||
|
||||
<button mat-raised-button
|
||||
class="buttons-class"
|
||||
(click)="checkout()">
|
||||
Checkout
|
||||
(click)="checkout()">{{vE.orderCheckoutBtn}}
|
||||
</button>
|
||||
<!--
|
||||
<button mat-raised-button class="text" color="primary" (click)="checkout()">Checkout</button>
|
||||
|
|
|
@ -19,6 +19,10 @@ import { faSignOut } from '@fortawesome/free-solid-svg-icons';
|
|||
|
||||
import { NotifierService } from '../notifier.service';
|
||||
|
||||
import { LanguageService } from '../language.service';
|
||||
import { LanguageData } from '../language.model';
|
||||
import {TipsComponent} from '../tips/tips.component';
|
||||
|
||||
@Component({
|
||||
selector: 'app-order',
|
||||
templateUrl: './order.component.html',
|
||||
|
@ -32,6 +36,7 @@ export class OrderComponent implements OnInit{
|
|||
|
||||
faInvoice = faFileInvoiceDollar;
|
||||
public order: Order = {
|
||||
_id: '',
|
||||
address: '',
|
||||
session: '',
|
||||
timestamp: '',
|
||||
|
@ -41,6 +46,12 @@ export class OrderComponent implements OnInit{
|
|||
total:0,
|
||||
totalZec: 0,
|
||||
paid: false,
|
||||
externalInvoice: '',
|
||||
shortCode: '',
|
||||
token: '',
|
||||
taxAmount: 0,
|
||||
vatAmount: 0,
|
||||
tipAmount: 0,
|
||||
lines: [
|
||||
{
|
||||
qty: 1,
|
||||
|
@ -51,9 +62,15 @@ export class OrderComponent implements OnInit{
|
|||
};
|
||||
public price: number = 1;
|
||||
public total: number = 0;
|
||||
public tax: number = 0;
|
||||
public vat: number = 0;
|
||||
public tip: boolean = false;
|
||||
public orderUpdate: Observable<Order>;
|
||||
public priceUpdate: Observable<number>;
|
||||
public totalUpdate: Observable<number>;
|
||||
public taxUpdate: Observable<number>;
|
||||
public vatUpdate: Observable<number>;
|
||||
public tipUpdate: Observable<boolean>;
|
||||
|
||||
// ------------------------------------
|
||||
//
|
||||
|
@ -62,9 +79,31 @@ export class OrderComponent implements OnInit{
|
|||
faChevronRight = faChevronRight;
|
||||
faSignOut = faSignOut;
|
||||
// -------------------------------------
|
||||
|
||||
|
||||
//
|
||||
// Language Support
|
||||
//
|
||||
vE = {
|
||||
orderNoOpenorder : '',
|
||||
orderCancelOrder : '',
|
||||
orderConfirmCancel : '',
|
||||
orderRemoveItem : '',
|
||||
orderConfirmRemove : '',
|
||||
orderConfirmRemove1 : '',
|
||||
orderCancelOk : '',
|
||||
orderNotservClose : '',
|
||||
orderNotservSuccess : '',
|
||||
orderTotalTitle : '',
|
||||
orderItemLbl : '',
|
||||
orderQtyLbl : '',
|
||||
orderTotalLbl : '',
|
||||
orderCancelBtn : '',
|
||||
orderInvoiceBtn : '',
|
||||
orderCheckoutBtn : ''
|
||||
}
|
||||
//
|
||||
// ------------------------------------------------------------
|
||||
constructor(
|
||||
private languageService : LanguageService,
|
||||
public fullnodeService: FullnodeService,
|
||||
public orderService: OrderService,
|
||||
private dialog: MatDialog,
|
||||
|
@ -77,7 +116,6 @@ export class OrderComponent implements OnInit{
|
|||
this.orderUpdate = orderService.orderUpdate;
|
||||
this.orderUpdate.subscribe((order) => {
|
||||
this.order = order;
|
||||
// ------------------------------------------------
|
||||
this.oLines = [];
|
||||
this.myLines = this.order.lines;
|
||||
var nl = {} as newLineItem;
|
||||
|
@ -103,9 +141,22 @@ export class OrderComponent implements OnInit{
|
|||
this.total = total;
|
||||
});
|
||||
|
||||
this.taxUpdate = orderService.taxUpdate;
|
||||
this.taxUpdate.subscribe((tax) => {
|
||||
this.tax = tax;
|
||||
});
|
||||
this.vatUpdate = orderService.vatUpdate;
|
||||
this.vatUpdate.subscribe((vat) => {
|
||||
this.vat = vat;
|
||||
});
|
||||
this.tipUpdate = orderService.tipUpdate;
|
||||
this.tipUpdate.subscribe((tip) => {
|
||||
this.tip = tip;
|
||||
});
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
this.chgUILanguage();
|
||||
}
|
||||
|
||||
cancelOrder() {
|
||||
|
@ -113,61 +164,84 @@ export class OrderComponent implements OnInit{
|
|||
|
||||
dialogConfig.disableClose = true;
|
||||
dialogConfig.autoFocus = true;
|
||||
dialogConfig.data = {title: 'Cancel Order?', msg: 'Are you sure you want to cancel the order?'};
|
||||
dialogConfig.data = {title: this.vE.orderCancelOrder,
|
||||
msg: this.vE.orderConfirmCancel };
|
||||
|
||||
const dialogRef = this.dialog.open(CancelComponent, dialogConfig);
|
||||
dialogRef.afterClosed().subscribe((val) => {
|
||||
if (val) {
|
||||
console.log('Canceling');
|
||||
//console.log('Canceling');
|
||||
this.orderService.cancelOrder(this.order._id!).subscribe((response) => {
|
||||
this.orderService.getOrder();
|
||||
this.notifierService
|
||||
.showNotification("Order successfully cancelled!",
|
||||
"Close","success");
|
||||
.showNotification(this.vE.orderCancelOk,
|
||||
this.vE.orderNotservClose,
|
||||
'success',
|
||||
this.vE.orderNotservSuccess);
|
||||
});
|
||||
} else {
|
||||
console.log('Returning to page');
|
||||
}
|
||||
//else {
|
||||
//console.log('Returning to page');
|
||||
//}
|
||||
this.orderService.getOrder();
|
||||
this.oLines = [];
|
||||
});
|
||||
}
|
||||
|
||||
checkout() {
|
||||
var zec = this.total/this.price;
|
||||
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 dialogConfig3 = new MatDialogConfig();
|
||||
|
||||
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');
|
||||
}
|
||||
dialogConfig3.disableClose = true;
|
||||
dialogConfig3.autoFocus = true;
|
||||
dialogConfig3.data = {
|
||||
amt: this.total,
|
||||
flag: this.tip
|
||||
};
|
||||
|
||||
|
||||
const dialogRef3 = this.dialog.open(TipsComponent, dialogConfig3);
|
||||
dialogRef3.afterClosed().subscribe((tipVal) => {
|
||||
this.orderService.updateTip(tipVal).then((orderData) => {
|
||||
this.orderService.getOrder().subscribe((oData) => {
|
||||
var zec = this.total/this.price;
|
||||
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);
|
||||
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() {
|
||||
|
@ -178,9 +252,12 @@ export class OrderComponent implements OnInit{
|
|||
dialogConfig.disableClose = true;
|
||||
dialogConfig.autoFocus = true;
|
||||
dialogConfig.data = {
|
||||
orderId: this.order._id
|
||||
orderId: this.order._id,
|
||||
orderToken: this.order.token
|
||||
};
|
||||
|
||||
//console.log ('order_id : ' + this.order._id);
|
||||
|
||||
const dialogRef = this.dialog.open(PromptInvoiceComponent, dialogConfig);
|
||||
dialogRef.afterClosed().subscribe((val) => {
|
||||
if (val) {
|
||||
|
@ -215,10 +292,10 @@ export class OrderComponent implements OnInit{
|
|||
|
||||
dialogConfig.disableClose = true;
|
||||
dialogConfig.autoFocus = true;
|
||||
dialogConfig.data = {title: 'Remove Item?',
|
||||
msg: 'Are you sure you want to remove <<' +
|
||||
dialogConfig.data = {title: this.vE.orderRemoveItem,
|
||||
msg: this.vE.orderConfirmRemove +
|
||||
item.name + ' x ' + item.qty +
|
||||
'>> from this order?'};
|
||||
this.vE.orderConfirmRemove1 };
|
||||
const dialogRef = this.dialog.open(CancelComponent, dialogConfig);
|
||||
dialogRef.afterClosed().subscribe((val) => {
|
||||
if (val) {
|
||||
|
@ -233,12 +310,41 @@ export class OrderComponent implements OnInit{
|
|||
this.orderService.getOrder();
|
||||
});
|
||||
}
|
||||
|
||||
} else {
|
||||
console.log('Returning to order');
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
|
||||
chgUILanguage(){
|
||||
//console.log('ORDER.chgUILanguage Called ');
|
||||
this.languageService.getViewElements('order').subscribe({
|
||||
next: response => {
|
||||
//console.log('Received >> ', response );
|
||||
//console.log('Language Code : ', response.language);
|
||||
//console.log('Component Name : ',response.component);
|
||||
//console.log('Language data : ',response.data);
|
||||
|
||||
this.vE.orderNoOpenorder = response.data.order_no_openorder;
|
||||
this.vE.orderCancelOrder = response.data.order_cancel_order;
|
||||
this.vE.orderConfirmCancel = response.data.order_confirm_cancel;
|
||||
this.vE.orderRemoveItem = response.data.order_remove_item;
|
||||
this.vE.orderConfirmRemove = response.data.order_confirm_remove;
|
||||
this.vE.orderConfirmRemove1 = response.data.order_confirm_remove1;
|
||||
this.vE.orderCancelOk = response.data.order_cancel_ok;
|
||||
this.vE.orderNotservClose = response.data.order_notserv_close;
|
||||
this.vE.orderNotservSuccess = response.data.order_notserv_success;
|
||||
this.vE.orderTotalTitle = response.data.order_total_title;
|
||||
this.vE.orderItemLbl = response.data.order_item_lbl;
|
||||
this.vE.orderQtyLbl = response.data.order_qty_lbl;
|
||||
this.vE.orderTotalLbl = response.data.order_total_lbl;
|
||||
this.vE.orderCancelBtn = response.data.order_cancel_btn;
|
||||
this.vE.orderInvoiceBtn = response.data.order_invoice_btn;
|
||||
this.vE.orderCheckoutBtn = response.data.order_checkout_btn;
|
||||
|
||||
},
|
||||
error: error => { console.log('Error >> ',error); }
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import { LineItem } from '../items/lineitem.model';
|
||||
|
||||
export interface Order {
|
||||
_id?: string,
|
||||
_id?: string|null,
|
||||
address: string,
|
||||
session: string,
|
||||
timestamp?: string,
|
||||
|
@ -11,5 +11,11 @@ export interface Order {
|
|||
total: number,
|
||||
totalZec: number,
|
||||
lines: LineItem[],
|
||||
paid: boolean
|
||||
paid: boolean,
|
||||
externalInvoice: string,
|
||||
shortCode: string,
|
||||
token: string,
|
||||
taxAmount: number,
|
||||
vatAmount: number,
|
||||
tipAmount: number
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { Injectable } from '@angular/core';
|
||||
import { Subject, BehaviorSubject, Observable } from 'rxjs';
|
||||
import { BehaviorSubject, Observable, lastValueFrom } from 'rxjs';
|
||||
import { HttpClient, HttpParams, HttpHeaders } from '@angular/common/http';
|
||||
import { Order } from './order.model';
|
||||
import { UserService } from '../user.service';
|
||||
|
@ -35,22 +35,14 @@ export class OrderService {
|
|||
taxValue: 0,
|
||||
vat: false,
|
||||
vatValue: 0,
|
||||
first: '',
|
||||
last: '',
|
||||
email: '',
|
||||
street: '',
|
||||
city: '',
|
||||
state: '',
|
||||
postal: '',
|
||||
phone: '',
|
||||
paid: false,
|
||||
website: '',
|
||||
country: '',
|
||||
zats: false,
|
||||
invoices: false,
|
||||
expiration: new Date(Date.now()).toISOString(),
|
||||
payconf: false,
|
||||
viewkey: ''
|
||||
crmToken: '',
|
||||
viewkey: '',
|
||||
tips: false
|
||||
},
|
||||
order: {
|
||||
address: '',
|
||||
|
@ -62,6 +54,12 @@ export class OrderService {
|
|||
total: 0,
|
||||
totalZec: 0,
|
||||
paid: false,
|
||||
externalInvoice: '',
|
||||
shortCode: '',
|
||||
token: '',
|
||||
taxAmount: 0,
|
||||
vatAmount: 0,
|
||||
tipAmount: 0,
|
||||
lines: [
|
||||
{
|
||||
qty: 1,
|
||||
|
@ -77,9 +75,17 @@ export class OrderService {
|
|||
public readonly totalUpdate: Observable<number> = this._totalUpdated.asObservable();
|
||||
private _allOrdersUpdated: BehaviorSubject<Order[]> = new BehaviorSubject(this.dataStore.allOrders);
|
||||
public readonly allOrdersUpdate: Observable<Order[]> = this._allOrdersUpdated.asObservable();
|
||||
private _taxUpdated: BehaviorSubject<number> = new BehaviorSubject(this.dataStore.owner.taxValue);
|
||||
public readonly taxUpdate: Observable<number> = this._taxUpdated.asObservable();
|
||||
private _vatUpdated: BehaviorSubject<number> = new BehaviorSubject(this.dataStore.owner.vatValue);
|
||||
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 ownerUpdate: Observable<Owner>;
|
||||
private reqHeaders: HttpHeaders;
|
||||
private reqParams: HttpParams;
|
||||
private session: null|string;
|
||||
|
||||
constructor(
|
||||
private http: HttpClient,
|
||||
|
@ -87,32 +93,38 @@ export class OrderService {
|
|||
public userService: UserService
|
||||
) {
|
||||
var auth = 'Basic ' + Buffer.from(ConfigData.UsrPwd).toString('base64');
|
||||
this.session = localStorage.getItem('s4z_token');
|
||||
this.reqHeaders = new HttpHeaders().set('Authorization', auth);
|
||||
this.reqParams = new HttpParams().append('session', this.session!);
|
||||
this.userUpdate = userService.userUpdate;
|
||||
this.ownerUpdate = userService.ownerUpdate;
|
||||
this.userUpdate.subscribe((user) => {
|
||||
this.dataStore.user = user;
|
||||
//console.log('OS: const', user);
|
||||
this.getOrder();
|
||||
});
|
||||
this.ownerUpdate.subscribe((owner) => {
|
||||
this.dataStore.owner = owner;
|
||||
if (this.dataStore.owner.tax) {
|
||||
this._taxUpdated.next(Object.assign({}, this.dataStore).owner.taxValue);
|
||||
} else {
|
||||
this._taxUpdated.next(0);
|
||||
}
|
||||
if (this.dataStore.owner.vat) {
|
||||
this._vatUpdated.next(Object.assign({}, this.dataStore).owner.vatValue);
|
||||
} else {
|
||||
this._vatUpdated.next(0);
|
||||
}
|
||||
this._tipUpdated.next(Object.assign({}, this.dataStore).owner.tips);
|
||||
});
|
||||
}
|
||||
|
||||
getOrder() {
|
||||
var session = this.dataStore.user.session;
|
||||
const params = new HttpParams().append('session', session);
|
||||
let obs = this.http.get<{message: string, order: any}>(this.beUrl+'api/order', { headers:this.reqHeaders, params:params, observe: 'response'});
|
||||
let obs = this.http.get<{message: string, order: any}>(this.beUrl+'api/order', { headers:this.reqHeaders, params: this.reqParams, observe: 'response'});
|
||||
|
||||
obs.subscribe((OrderDataResponse) => {
|
||||
if (OrderDataResponse.status == 200) {
|
||||
this.dataStore.order = OrderDataResponse.body!.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);
|
||||
} else {
|
||||
console.log('No order found');
|
||||
|
@ -124,7 +136,7 @@ export class OrderService {
|
|||
|
||||
getAllOrders(){
|
||||
var address = this.dataStore.user.address;
|
||||
const params = new HttpParams().append('address', address);
|
||||
const params = this.reqParams.append('address', address);
|
||||
let obs = this.http.get<{message: string, orders: any}>(this.beUrl+'api/allorders', { headers:this.reqHeaders, params:params, observe: 'response'});
|
||||
obs.subscribe((OrdersData) => {
|
||||
if (OrdersData.status == 200 ){
|
||||
|
@ -142,7 +154,7 @@ export class OrderService {
|
|||
addToOrder(lineItem: LineItem) {
|
||||
if(this.dataStore.order._id != null) {
|
||||
this.dataStore.order.lines.push(lineItem);
|
||||
let obs = this.http.post(this.beUrl+'api/order', { payload: this.dataStore.order }, { headers: this.reqHeaders });
|
||||
let obs = this.http.post(this.beUrl+'api/order', { payload: this.dataStore.order }, { headers: this.reqHeaders, params: this.reqParams });
|
||||
obs.subscribe((orderData) => {
|
||||
this.getOrder();
|
||||
});
|
||||
|
@ -163,11 +175,16 @@ export class OrderService {
|
|||
price: 0,
|
||||
total: 0,
|
||||
paid: false,
|
||||
externalInvoice: '',
|
||||
shortCode: '',
|
||||
token: '',
|
||||
taxAmount: 0,
|
||||
vatAmount: 0,
|
||||
tipAmount: 0,
|
||||
lines: [lineItem]
|
||||
};
|
||||
let obs = this.http.post<{message: string, order: Order}>(this.beUrl+'api/order', {payload: order}, { headers: this.reqHeaders });
|
||||
let obs = this.http.post<{message: string, order: Order}>(this.beUrl+'api/order', {payload: order}, { headers: this.reqHeaders, params: this.reqParams });
|
||||
obs.subscribe((orderData) => {
|
||||
console.log('Created order');
|
||||
this.getOrder()
|
||||
});
|
||||
|
||||
|
@ -175,7 +192,7 @@ export class OrderService {
|
|||
}
|
||||
|
||||
cancelOrder(id: string) {
|
||||
let obs = this.http.delete<{message: string}>(this.beUrl+'api/order/'+id, { headers: this.reqHeaders });
|
||||
let obs = this.http.delete<{message: string}>(this.beUrl+'api/order/'+id, { headers: this.reqHeaders, params: this.reqParams });
|
||||
|
||||
obs.subscribe((OrderResponse) => {
|
||||
console.log('Order deleted');
|
||||
|
@ -190,6 +207,12 @@ export class OrderService {
|
|||
totalZec: 0,
|
||||
price: 0,
|
||||
paid: false,
|
||||
externalInvoice: '',
|
||||
shortCode: '',
|
||||
token: '',
|
||||
taxAmount: 0,
|
||||
vatAmount: 0,
|
||||
tipAmount: 0,
|
||||
lines: [
|
||||
{
|
||||
qty: 1,
|
||||
|
@ -204,15 +227,22 @@ export class OrderService {
|
|||
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){
|
||||
this.fullnodeService.priceUpdate.subscribe((price) => {
|
||||
this.dataStore.order.price = price;
|
||||
});
|
||||
this.dataStore.order.closed = true;
|
||||
this.dataStore.order.paid = paid;
|
||||
let obs = this.http.post(this.beUrl+'api/order', {payload: this.dataStore.order}, { headers: this.reqHeaders });
|
||||
let obs = this.http.post(this.beUrl+'api/order', {payload: this.dataStore.order}, { headers: this.reqHeaders, params: this.reqParams });
|
||||
obs.subscribe((orderData) => {
|
||||
console.log('Closed order', orderData);
|
||||
//console.log('Closed order', orderData);
|
||||
this.dataStore.order = {
|
||||
address: '',
|
||||
session: '',
|
||||
|
@ -223,6 +253,12 @@ export class OrderService {
|
|||
total: 0,
|
||||
totalZec: 0,
|
||||
paid: false,
|
||||
externalInvoice: '',
|
||||
shortCode: '',
|
||||
token: '',
|
||||
taxAmount: 0,
|
||||
vatAmount: 0,
|
||||
tipAmount: 0,
|
||||
lines: [
|
||||
{
|
||||
qty: 1,
|
||||
|
|
|
@ -7,20 +7,12 @@ export interface Owner {
|
|||
taxValue: number;
|
||||
vat: boolean;
|
||||
vatValue: number;
|
||||
first: string;
|
||||
last: string;
|
||||
email: string;
|
||||
street: string;
|
||||
city: string;
|
||||
state: string;
|
||||
postal: string;
|
||||
phone: string;
|
||||
paid: boolean;
|
||||
website: string;
|
||||
country: string;
|
||||
zats: boolean;
|
||||
invoices: boolean;
|
||||
expiration: string;
|
||||
payconf: boolean;
|
||||
crmToken: string;
|
||||
viewkey: string;
|
||||
tips: boolean;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,111 @@
|
|||
.invoice {
|
||||
font-family: Roboto Mono !important;
|
||||
}
|
||||
|
||||
.zecSign {
|
||||
margin-bottom: -4px;
|
||||
font-size: 18px;
|
||||
height: 18px;
|
||||
}
|
||||
|
||||
.invoiceHeader {
|
||||
display: flex;
|
||||
font-family: Spartan;
|
||||
font-weight: 700;
|
||||
font-size: 26px;
|
||||
color: white;
|
||||
justify-content: space-between;
|
||||
line-height: 40px;
|
||||
padding: 10px;
|
||||
vertical-align: center;
|
||||
max-width: 600px;
|
||||
background: #ff5722;
|
||||
}
|
||||
|
||||
.invoiceDetail {
|
||||
font-family: Roboto Mono !important;
|
||||
padding: 10px;
|
||||
max-width: 600px;
|
||||
}
|
||||
|
||||
.invoiceHdrTxt1 {
|
||||
font-family: Spartan !important;
|
||||
text-align: center;
|
||||
font-size: 30px;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.invoiceHdrTxt2 {
|
||||
font-family: Spartan !important;
|
||||
text-align: center;
|
||||
font-size: 16px;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.invoiceHdrTxt3 {
|
||||
font-family: Spartan !important;
|
||||
text-align: center;
|
||||
font-size: 12px;
|
||||
font-weight: 300;
|
||||
}
|
||||
|
||||
.detailTitle1 {
|
||||
border-top: solid 2px;
|
||||
border-bottom: solid 2px;
|
||||
border-color: navy;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.detailTitle2 {
|
||||
border-top: solid 2px;
|
||||
border-bottom: solid 2px;
|
||||
border-color: navy;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.detailLineRight {
|
||||
border-top: solid 2px;
|
||||
border-bottom: solid 2px;
|
||||
border-color: navy;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.detailLineLeft {
|
||||
border-top: solid 2px;
|
||||
border-bottom: solid 2px;
|
||||
border-color: navy;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.invoice-title {
|
||||
font-size: 16px;
|
||||
font-weight: 700;
|
||||
background: lightcyan;
|
||||
line-height: 30px;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.invoice-detail {
|
||||
line-height: 20px;
|
||||
font-size: 16px;
|
||||
font-weight: 400;
|
||||
padding-top: 4px;
|
||||
padding-bottom: 4px;
|
||||
}
|
||||
|
||||
.invoice-total {
|
||||
margin-top: 40px;
|
||||
}
|
||||
|
||||
.qrcode {
|
||||
display: flex;
|
||||
float: right;
|
||||
}
|
||||
|
||||
.zecData {
|
||||
width: auto;
|
||||
font-family: Spartan !important;
|
||||
font-size: 16px;
|
||||
font-weight: 700;
|
||||
text-align: right;
|
||||
}
|
|
@ -1 +1,256 @@
|
|||
<p>{{ pmtData.ownerId }}</p>
|
||||
<div style="font-family: 'Spartan';
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;">
|
||||
<div class="container">
|
||||
<div class="invoiceHeader">
|
||||
<img class="logo" src="/assets/logo-new-white.png" height="40px" />
|
||||
</div>
|
||||
<div *ngIf="reportType==1">
|
||||
<div style="height: 50px;">
|
||||
</div>
|
||||
<div style="font-weight: 700;
|
||||
font-size: 25px;
|
||||
text-align: center;">
|
||||
{{ vE.pmtserviceInvalidOwnerid }}
|
||||
</div>
|
||||
<div style="height: 40px;">
|
||||
</div>
|
||||
{{ vE.pmtservicePaymentNotprocessed }}
|
||||
<div style="height: 20px;">
|
||||
</div>
|
||||
</div>
|
||||
<div *ngIf="reportType==2">
|
||||
<div style="height: 50px;">
|
||||
</div>
|
||||
<div style="font-weight: 700;
|
||||
fonT-size: 25px;
|
||||
text-align: center;">
|
||||
{{ vE.pmtservicePmtsrvNot }}<br>
|
||||
{{ vE.pmtserviceEnabledFor }}<br>
|
||||
{{ shop }}
|
||||
</div>
|
||||
<div style="height: 40px;">
|
||||
</div>
|
||||
{{ vE.pmtservicePaymentNotprocessed }}
|
||||
<div style="height: 20px;">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div *ngIf="reportType==3">
|
||||
<div style="height: 50px;">
|
||||
</div>
|
||||
<div style="font-weight: 700;
|
||||
font-size: 25px;
|
||||
text-align: center;">
|
||||
{{ vE.pmtserviceConnectoXero }}<br>
|
||||
{{ vE.pmtserviceServerFailed }}
|
||||
</div>
|
||||
<div style="height: 40px;">
|
||||
</div>
|
||||
{{ vE.pmtservicePaymentNotprocessed }}
|
||||
<div style="height: 20px;">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div *ngIf="reportType==4">
|
||||
<div style="height: 50px;">
|
||||
</div>
|
||||
<div style="font-weight: 700;
|
||||
font-size: 25px;
|
||||
text-align: center;">
|
||||
{{ vE.pmtserviceInvoiceNum }}<br>{{ pmtData.invoice }}<br>{{ vE.pmtserviceInvoiceNotfound }}
|
||||
</div>
|
||||
<div style="height: 40px;">
|
||||
</div>
|
||||
{{ vE.pmtservicePaymentNotprocessed }}
|
||||
<div style="height: 20px;">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div *ngIf="reportType==5">
|
||||
<div style="height: 50px;">
|
||||
</div>
|
||||
<div style="font-weight: 700;
|
||||
font-size: 25px;
|
||||
text-align: center;">
|
||||
{{ vE.pmtserviceInvoiceNum }}<br>{{ pmtData.invoice }}<br>{{ vE.pmtserviceInvoiceInvalid }}
|
||||
</div>
|
||||
<div style="height: 40px;">
|
||||
</div>
|
||||
{{ vE.pmtservicePaymentNotprocessed }}
|
||||
<div style="height: 20px;">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div *ngIf="reportType==6">
|
||||
<div style="height: 50px;">
|
||||
</div>
|
||||
<div style="font-weight: 700;
|
||||
font-size: 25px;
|
||||
text-align: center;">
|
||||
{{ vE.pmtserviceInvoiceNum }}<br>{{ pmtData.invoice }}<br>{{ vE.pmtserviceInvoicePaid }}
|
||||
</div>
|
||||
<div style="height: 40px;">
|
||||
</div>
|
||||
{{ vE.pmtservicePaymentNotprocessed }}
|
||||
<div style="height: 20px;">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div *ngIf="reportType==7">
|
||||
<div style="height: 50px;">
|
||||
</div>
|
||||
<div style="font-weight: 700;
|
||||
font-size: 25px;
|
||||
text-align: center;">
|
||||
{{ vE.pmtserviceInvoiceCurrency }}<br>[ {{ pmtData.currency }} ]<br>{{ vE.pmtserviceCurrencyNotsup }}
|
||||
</div>
|
||||
<div style="height: 40px;">
|
||||
</div>
|
||||
{{ vE.pmtservicePaymentNotprocessed }}
|
||||
<div style="height: 20px;">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div *ngIf="reportType==8">
|
||||
<div style="height: 50px;">
|
||||
</div>
|
||||
<div style="font-weight: 700;
|
||||
font-size: 25px;
|
||||
text-align: center;">
|
||||
{{ vE.pmtserviceAmountDoesnot }}<br>
|
||||
{{ vE.pmtserviceMatchValue }}<br>
|
||||
{{ vE.pmtserviceReportedByxero }}
|
||||
</div>
|
||||
<div style="height: 40px;">
|
||||
</div>
|
||||
{{ vE.pmtservicePaymentNotprocessed }}
|
||||
<div style="height: 20px;">
|
||||
</div>
|
||||
</div>
|
||||
<div class="invoiceDetail"
|
||||
*ngIf="reportType==0"
|
||||
>
|
||||
<div class="invoiceHdrTxt1">{{ vE.pmtserviceHdrTxt1 }}</div>
|
||||
<div class="invoiceHdrTxt2">{{ vE.pmtserviceHdrTxt2 }}{{orderId}}</div>
|
||||
<div class="invoiceHdrTxt3">{{ vE.pmtserviceHdrTxt3 }}{{order.timestamp | date}}
|
||||
</div>
|
||||
<div style="height: 10px;"></div>
|
||||
<div class="zecData">{{ vE.pmtserviceZecdataPrice }}{{order.price | number: '1.02' | currency: order.currency.toUpperCase()}}</div>
|
||||
<div style="height: 2px;"></div>
|
||||
<div class="zecData">{{ vE.pmtserviceZecdataTotal }}<img class="zecSign" src="/assets/zec_rv.png" />{{order.totalZec | number: '1.08'}}
|
||||
</div>
|
||||
<div>
|
||||
<div style="height: 10px;"></div>
|
||||
<table style="width: 100%;"
|
||||
cellspacing="0">
|
||||
<tr class="invoice-title">
|
||||
<th width="55%"
|
||||
class="detailTitle1">
|
||||
{{ vE.pmtserviceInvoiceItem }}
|
||||
</th>
|
||||
<th width="15%"
|
||||
class="detailTitle1">
|
||||
{{ vE.pmtserviceInvoiceQty }}
|
||||
</th>
|
||||
<th width="30%"
|
||||
class="detailTitle2">
|
||||
{{ vE.pmtserviceInvoicePrice }} ({{order.currency.toUpperCase()}})
|
||||
</th>
|
||||
</tr>
|
||||
<tr class="invoice-detail"
|
||||
*ngFor="let item of order.lines">
|
||||
<td width="55%"
|
||||
align="left">
|
||||
{{item.name}}
|
||||
</td>
|
||||
<td width="15%"
|
||||
align="center">
|
||||
{{item.qty}}
|
||||
</td>
|
||||
<td width="30%"
|
||||
align="right">
|
||||
{{( item.qty * item.cost ) | number : '1.02' | currency: order.currency.toUpperCase()}}
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="invoice-title">
|
||||
<th width="55%"
|
||||
class="detailLineRight">
|
||||
{{ vE.pmtserviceInvoiceTotal }}
|
||||
</th>
|
||||
<th width="15%"
|
||||
class="detailLineLeft">
|
||||
|
||||
</th>
|
||||
<th width="30%"
|
||||
class="detailLineRight">
|
||||
{{ order.total | currency: order.currency.toUpperCase()}}
|
||||
</th>
|
||||
</tr>
|
||||
</table>
|
||||
<div style="height: 15px;"></div>
|
||||
<table>
|
||||
<tr>
|
||||
<td width="75%"
|
||||
style="font-size: 20px;
|
||||
font-weight: 700;
|
||||
font-style: italic;
|
||||
text-align: center;">
|
||||
<p *ngIf="order.paid">
|
||||
<fa-icon [icon]="faCheck"
|
||||
color="primary"></fa-icon> {{ vE.pmtservicePaymentConfirmed }}</p>
|
||||
<p *ngIf="!order.paid">
|
||||
<fa-icon [style]="getIconStyle(order)"
|
||||
[icon]="faHourglass"></fa-icon> {{ vE.pmtservicePaymentPending }}</p>
|
||||
</td>
|
||||
<td width="25%">
|
||||
<div style="text-align: right;"
|
||||
id="invoice-qr"
|
||||
*ngIf="!order.paid"></div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div style="height: 15px;"></div>
|
||||
<div width="100%"
|
||||
style="font-size: 14px;
|
||||
font-weight: 700;
|
||||
font-style: italic;
|
||||
text-align: center;">
|
||||
{{ vE.pmtserviceScanQrcode }}
|
||||
</div>
|
||||
<div style="text-align: center;
|
||||
margin-top: 10px;
|
||||
line-height: 30px;">
|
||||
<div style="font-family: 'Spartan';
|
||||
font-size: 14px;
|
||||
line-height: 20px;">
|
||||
{{ vE.pmtserviceCantScan }}<br>{{ vE.pmtserviceUseThis }}<a [href]="zcashUrl">{{ vE.pmtserviceWalletLink }}</a>, or
|
||||
</div>
|
||||
<div style="display: flex;
|
||||
justify-content: space-between;">
|
||||
<button style="margin-top: 20px;
|
||||
font-weight: 700;
|
||||
background-color: lightgray;"
|
||||
mat-raised-button
|
||||
(click)="copyAddress()">{{ vE.pmtserviceCopyAddress }}</button>
|
||||
<button style="margin-top: 20px;
|
||||
font-weight: 700;
|
||||
background-color: lightgray;"
|
||||
mat-raised-button
|
||||
(click)="copyAmount()">{{ vE.pmtserviceCopyAmount }}</button>
|
||||
</div>
|
||||
<button style="margin-top: 20px;
|
||||
font-weight: 700;
|
||||
background-color: lightgray;"
|
||||
mat-raised-button
|
||||
(click)="copyMemo()">{{ vE.pmtserviceCopyMemo }}</button>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,36 +1,321 @@
|
|||
import { Component, OnInit } from '@angular/core';
|
||||
import { Router, ActivatedRoute, Params } from "@angular/router";
|
||||
import { PmtData } from "./pmtservice.model"
|
||||
import { ActivatedRoute} from "@angular/router";
|
||||
import { HttpClient, HttpParams, HttpHeaders } from "@angular/common/http";
|
||||
import { DomSanitizer, SafeUrl } from '@angular/platform-browser';
|
||||
import { PmtData } from "./pmtservice.model";
|
||||
import { XeroInvoice } from "./xeroinvoice.model";
|
||||
import { Order } from '../order/order.model'
|
||||
import { ConfigData } from '../configdata';
|
||||
import { faCheck, faHourglass } from '@fortawesome/free-solid-svg-icons';
|
||||
|
||||
import { NotifierService } from '../notifier.service';
|
||||
|
||||
var QRCode = require('easyqrcodejs');
|
||||
var URLSafeBase64 = require('urlsafe-base64');
|
||||
var Buffer = require('buffer/').Buffer;
|
||||
|
||||
import { LanguageService } from '../language.service';
|
||||
|
||||
@Component({
|
||||
selector: 'app-pmtservice',
|
||||
templateUrl: './pmtservice.component.html',
|
||||
styleUrls: ['./pmtservice.component.css']
|
||||
selector: 'app-pmtservice',
|
||||
templateUrl: './pmtservice.component.html',
|
||||
styleUrls: ['./pmtservice.component.css']
|
||||
})
|
||||
|
||||
export class PmtserviceComponent implements OnInit {
|
||||
|
||||
faCheck = faCheck;
|
||||
faHourglass = faHourglass;
|
||||
|
||||
public pmtData : PmtData = {
|
||||
ownerId :'',
|
||||
invoice: '',
|
||||
amount: 0,
|
||||
currency: '',
|
||||
shortcode: ''
|
||||
};
|
||||
beUrl = ConfigData.Be_URL;
|
||||
private reqHeaders: HttpHeaders = new HttpHeaders();
|
||||
|
||||
constructor(private activatedRoute: ActivatedRoute) {}
|
||||
public shop: string = '';
|
||||
public pmtData : PmtData = {
|
||||
ownerId :'',
|
||||
invoice: '',
|
||||
amount: 0,
|
||||
currency: '',
|
||||
shortcode: ''
|
||||
};
|
||||
|
||||
ngOnInit() {
|
||||
this.activatedRoute.queryParams.subscribe((params) => {
|
||||
this.pmtData.ownerId = params["ownerid"];
|
||||
this.pmtData.invoice = params["invoice"];
|
||||
this.pmtData.amount = params["amount"];
|
||||
this.pmtData.currency = params["currency"];
|
||||
this.pmtData.shortcode = params["shortcode"];
|
||||
public invData : XeroInvoice = {
|
||||
inv_Type : '',
|
||||
inv_Id : '',
|
||||
inv_No : '',
|
||||
inv_Contact : '',
|
||||
inv_Currency : '',
|
||||
inv_CurrencyRate : 0,
|
||||
inv_Status : '',
|
||||
inv_Total : 0,
|
||||
inv_Date : new Date(),
|
||||
inv_shortCode : '',
|
||||
inv_ProcDate : new Date()
|
||||
};
|
||||
|
||||
console.log(this.pmtData);
|
||||
});
|
||||
}
|
||||
|
||||
public order: Order = {
|
||||
_id : '',
|
||||
address: '',
|
||||
session: '',
|
||||
timestamp: '',
|
||||
closed: false,
|
||||
currency: '',
|
||||
price: 0,
|
||||
total: 0,
|
||||
totalZec: 0,
|
||||
paid: false,
|
||||
externalInvoice: '',
|
||||
shortCode: '',
|
||||
token: '',
|
||||
taxAmount: 0,
|
||||
vatAmount: 0,
|
||||
tipAmount: 0,
|
||||
lines: [
|
||||
{
|
||||
qty: 1,
|
||||
name: '',
|
||||
cost:0
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
private invData_raw : string = '';
|
||||
private invData_buff : any = null;
|
||||
|
||||
public reportType = 0;
|
||||
public Status = 0;
|
||||
|
||||
codeString: string = 'ZGo - The Zcash Register';
|
||||
zcashUrl: SafeUrl = '';
|
||||
zPrice: number = 1.0;
|
||||
name: string = '';
|
||||
error: boolean = false;
|
||||
orderId : string = '';
|
||||
// -------------------------------------
|
||||
// Language Support
|
||||
//
|
||||
vE = {
|
||||
pmtserviceInvalidOwnerid : '',
|
||||
pmtserviceNotservClose : '',
|
||||
pmtserviceNotservError : '',
|
||||
pmtserviceCopyNotavail : '',
|
||||
pmtserviceCopyaddressError : '',
|
||||
pmtserviceCopyamountError : '',
|
||||
pmtserviceCopymemoError : '',
|
||||
pmtservicePaymentNotprocessed : '',
|
||||
pmtservicePmtsrvNot : '',
|
||||
pmtserviceEnabledFor : '',
|
||||
pmtserviceConnectoXero : '',
|
||||
pmtserviceServerFailed : '',
|
||||
pmtserviceInvoiceNum : '',
|
||||
pmtserviceInvoiceNotfound : '',
|
||||
pmtserviceInvoiceInvalid : '',
|
||||
pmtserviceInvoicePaid : '',
|
||||
pmtserviceInvoiceCurrency : '',
|
||||
pmtserviceCurrencyNotsup : '',
|
||||
pmtserviceAmountDoesnot : '',
|
||||
pmtserviceMatchValue : '',
|
||||
pmtserviceReportedByxero : '',
|
||||
pmtserviceHdrTxt1 : '',
|
||||
pmtserviceHdrTxt2 : '',
|
||||
pmtserviceHdrTxt3 : '',
|
||||
pmtserviceZecdataPrice : '',
|
||||
pmtserviceZecdataTotal : '',
|
||||
pmtserviceInvoiceItem : '',
|
||||
pmtserviceInvoiceQty : '',
|
||||
pmtserviceInvoicePrice : '',
|
||||
pmtserviceInvoiceTotal : '',
|
||||
pmtservicePaymentConfirmed : '',
|
||||
pmtservicePaymentPending : '',
|
||||
pmtserviceScanQrcode : '',
|
||||
pmtserviceCantScan : '',
|
||||
pmtserviceUseThis : '',
|
||||
pmtserviceWalletLink : '',
|
||||
pmtserviceCopyAddress : '',
|
||||
pmtserviceCopyAmount : '',
|
||||
pmtserviceCopyMemo : ''
|
||||
}
|
||||
//
|
||||
constructor(private activatedRoute : ActivatedRoute,
|
||||
private http : HttpClient,
|
||||
private sanitizer: DomSanitizer,
|
||||
private notifierService : NotifierService,
|
||||
private languageService : LanguageService ){
|
||||
var auth = 'Basic ' + Buffer.from(ConfigData.UsrPwd).toString('base64');
|
||||
this.reqHeaders = new HttpHeaders().set('Authorization', auth);
|
||||
this.activatedRoute.queryParams.subscribe((params) => {
|
||||
this.pmtData.ownerId = params["owner"];
|
||||
this.pmtData.invoice = params["invoiceNo"];
|
||||
this.pmtData.amount = +params["amount"];
|
||||
this.pmtData.currency = params["currency"];
|
||||
this.pmtData.shortcode = params["shortCode"];
|
||||
this.getInvoiceData( this.pmtData );
|
||||
});
|
||||
this.chgUILanguage();
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
}
|
||||
|
||||
getInvoiceData( reqData : PmtData ) {
|
||||
//this.getXeroInvoiceData( reqData );
|
||||
let obs = this.http.post<{reportType: number, order: Order, shop: string}>
|
||||
(this.beUrl+'invdata',
|
||||
{payload: reqData},
|
||||
{headers: this.reqHeaders, observe: 'response' }
|
||||
);
|
||||
obs.subscribe((invoiceData) => {
|
||||
if(invoiceData.status == 201) {
|
||||
this.reportType = invoiceData.body!.reportType;
|
||||
this.order = invoiceData.body!.order;
|
||||
this.shop = invoiceData.body!.shop;
|
||||
this.orderId = String(this.order._id);
|
||||
|
||||
// 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(this.order.externalInvoice)))}`;
|
||||
|
||||
var qrcode = new QRCode(document.getElementById("invoice-qr"), {
|
||||
text: this.codeString,
|
||||
logo: "/assets/zcash.png",
|
||||
width: 180,
|
||||
height: 180,
|
||||
logoWidth: 50,
|
||||
logoHeight: 50,
|
||||
correctLevel: QRCode.CorrectLevel.H
|
||||
});
|
||||
|
||||
this.zcashUrl = this.sanitizer.bypassSecurityTrustUrl(this.codeString);
|
||||
} else {
|
||||
this.reportType = invoiceData.body!.reportType;
|
||||
console.log('reportType ' + invoiceData.body!.reportType + ' code ' + invoiceData.status);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
getIconStyle(order : Order) {
|
||||
if( order.paid )
|
||||
return "font-size: 14px; color: #72cc50; margin-bottom: -2px;";
|
||||
return "color: #FB4F14; margin-bottom: -2px; cursor: pointer;";
|
||||
|
||||
}
|
||||
|
||||
copyAddress() {
|
||||
if (!navigator.clipboard) {
|
||||
// alert("Copy functionality not supported");
|
||||
this.notifierService
|
||||
.showNotification(this.vE.pmtserviceCopyNotavail,
|
||||
this.vE.pmtserviceNotservClose,
|
||||
"error",
|
||||
this.vE.pmtserviceNotservError);
|
||||
}
|
||||
try {
|
||||
navigator.clipboard.writeText(this.order.address);
|
||||
} catch (err) {
|
||||
this.notifierService
|
||||
.showNotification(this.vE.pmtserviceCopyaddressError,
|
||||
this.vE.pmtserviceNotservClose,
|
||||
"error",
|
||||
this.vE.pmtserviceNotservError);
|
||||
// console.error("Error", err);
|
||||
}
|
||||
}
|
||||
|
||||
copyAmount() {
|
||||
if (!navigator.clipboard) {
|
||||
// alert("Copy functionality not supported");
|
||||
this.notifierService
|
||||
.showNotification(this.vE.pmtserviceCopyNotavail,
|
||||
this.vE.pmtserviceNotservClose,
|
||||
"error",
|
||||
this.vE.pmtserviceNotservError);
|
||||
}
|
||||
try {
|
||||
navigator.clipboard.writeText(this.order.totalZec.toString());
|
||||
} catch (err) {
|
||||
this.notifierService
|
||||
.showNotification(this.vE.pmtserviceCopyamountError,
|
||||
this.vE.pmtserviceNotservClose,
|
||||
"error",
|
||||
this.vE.pmtserviceNotservError);
|
||||
// console.error("Error", err);
|
||||
}
|
||||
}
|
||||
|
||||
copyMemo() {
|
||||
if (!navigator.clipboard) {
|
||||
// alert("Copy functionality not supported");
|
||||
this.notifierService
|
||||
.showNotification(this.vE.pmtserviceCopyNotavail,
|
||||
this.vE.pmtserviceNotservClose,
|
||||
"error",
|
||||
this.vE.pmtserviceNotservError);
|
||||
}
|
||||
try {
|
||||
navigator.clipboard.writeText("ZGo Order::" + this.orderId + " Invoice: " + this.order.externalInvoice);
|
||||
} catch (err) {
|
||||
this.notifierService
|
||||
.showNotification(this.vE.pmtserviceCopymemoError,
|
||||
this.vE.pmtserviceNotservClose,
|
||||
"error",
|
||||
this.vE.pmtserviceNotservError);
|
||||
// console.error("Error", err);
|
||||
}
|
||||
}
|
||||
|
||||
chgUILanguage(){
|
||||
console.log('PMTSERVICE.chgUILanguage Called ');
|
||||
this.languageService.getViewElements('pmtservice').subscribe(
|
||||
response => {
|
||||
console.log('Received >> ', response );
|
||||
console.log('Language Code : ', response.language);
|
||||
console.log('Component Name : ',response.component);
|
||||
console.log('Language data : ',response.data);
|
||||
|
||||
this.vE.pmtserviceInvalidOwnerid = response.data.pmtservice_invalid_ownerid;
|
||||
this.vE.pmtserviceNotservClose = response.data.pmtservice_notserv_close;
|
||||
this.vE.pmtserviceNotservError = response.data.pmtservice_notserv_error;
|
||||
this.vE.pmtserviceCopyNotavail = response.data.pmtservice_copy_notavail;
|
||||
this.vE.pmtserviceCopyaddressError = response.data.pmtservice_copyaddress_error;
|
||||
this.vE.pmtserviceCopyamountError = response.data.pmtservice_copyamount_error;
|
||||
this.vE.pmtserviceCopymemoError = response.data.pmtservice_copymemo_error;
|
||||
this.vE.pmtservicePaymentNotprocessed = response.data.pmtservice_payment_notprocessed;
|
||||
this.vE.pmtservicePmtsrvNot = response.data.pmtservice_pmtsrv_not;
|
||||
this.vE.pmtserviceEnabledFor = response.data.pmtservice_enabled_for;
|
||||
this.vE.pmtserviceConnectoXero = response.data.pmtservice_connecto_xero;
|
||||
this.vE.pmtserviceServerFailed = response.data.pmtservice_server_failed;
|
||||
this.vE.pmtserviceInvoiceNum = response.data.pmtservice_invoice_num;
|
||||
this.vE.pmtserviceInvoiceNotfound = response.data.pmtservice_invoice_notfound;
|
||||
this.vE.pmtserviceInvoiceInvalid = response.data.pmtservice_invoice_invalid;
|
||||
this.vE.pmtserviceInvoicePaid = response.data.pmtservice_invoice_paid;
|
||||
this.vE.pmtserviceInvoiceCurrency = response.data.pmtservice_invoice_currency;
|
||||
this.vE.pmtserviceCurrencyNotsup = response.data.pmtservice_currensy_notsup;
|
||||
this.vE.pmtserviceAmountDoesnot = response.data.pmtservice_amount_doesnot;
|
||||
this.vE.pmtserviceMatchValue = response.data.pmtservice_match_value;
|
||||
this.vE.pmtserviceReportedByxero = response.data.pmtservice_reported_byxero;
|
||||
this.vE.pmtserviceHdrTxt1 = response.data.pmtservice_hdr_txt1;
|
||||
this.vE.pmtserviceHdrTxt2 = response.data.pmtservice_hdr_txt2;
|
||||
this.vE.pmtserviceHdrTxt3 = response.data.pmtservice_hdr_txt3;
|
||||
this.vE.pmtserviceZecdataPrice = response.data.pmtservice_zecdata_price;
|
||||
this.vE.pmtserviceZecdataTotal = response.data.pmtservice_zecdata_total;
|
||||
this.vE.pmtserviceInvoiceItem = response.data.pmtservice_invoice_item;
|
||||
this.vE.pmtserviceInvoiceQty = response.data.pmtservice_invoice_qty;
|
||||
this.vE.pmtserviceInvoicePrice = response.data.pmtservice_invoice_price;
|
||||
this.vE.pmtserviceInvoiceTotal = response.data.pmtservice_invoice_total;
|
||||
this.vE.pmtservicePaymentConfirmed = response.data.pmtservice_payment_confirmed;
|
||||
this.vE.pmtservicePaymentPending = response.data.pmtservice_payment_pending;
|
||||
this.vE.pmtserviceScanQrcode = response.data.pmtservice_scan_qrcode;
|
||||
this.vE.pmtserviceCantScan = response.data.pmtservice_cant_scan;
|
||||
this.vE.pmtserviceUseThis = response.data.pmtservice_use_this;
|
||||
this.vE.pmtserviceWalletLink = response.data.pmtservice_wallet_link;
|
||||
this.vE.pmtserviceCopyAddress = response.data.pmtservice_copy_address;
|
||||
this.vE.pmtserviceCopyAmount = response.data.pmtservice_copy_amount;
|
||||
this.vE.pmtserviceCopyMemo = response.data.pmtservice_copy_memo;
|
||||
|
||||
},
|
||||
error => { console.log('Error >> ',error); }
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1 +1,7 @@
|
|||
http://localhost:4200/pmtservice?ownerid=Rene&amount=30¤cy=USD&invoice=INV-003234&shortcode=abcde
|
||||
http://localhost:4200/pmtservice?ownerid=62cca13f5530331e2a97c78e&invoiceNo=INV-0034¤cy=USD&amount=753.95&shortCode=!w8T62
|
||||
|
||||
https://test.zgo.cash/api/invdata?address=zs17faa6l5ma55s55exq9rnr32tu0wl8nmqg7xp3e6tz0m5ajn2a6yxlc09t03mqdmvyphavvf3sl8&inv=INV-0034
|
||||
|
||||
https://www.paymentservice.com/?invoiceNo=[INVOICENUMBER]¤cy=[CURRENCY]&amount=[AMOUNTDUE]&shortCode=[SHORTCODE]
|
||||
|
||||
https://app.zgo.cash/invoice/
|
13
src/app/pmtservice/xeroinvoice.model.ts
Normal file
13
src/app/pmtservice/xeroinvoice.model.ts
Normal file
|
@ -0,0 +1,13 @@
|
|||
export interface XeroInvoice {
|
||||
inv_Type : string;
|
||||
inv_Id : string;
|
||||
inv_No : string;
|
||||
inv_Contact : string;
|
||||
inv_Currency : string;
|
||||
inv_CurrencyRate : number;
|
||||
inv_Total : number;
|
||||
inv_Status : string;
|
||||
inv_Date : Date;
|
||||
inv_shortCode : string;
|
||||
inv_ProcDate : Date;
|
||||
}
|
|
@ -1,3 +1,8 @@
|
|||
::ng-deep .mdc-button__label {
|
||||
font-family: "Spartan" sans-serif;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
::ng-deep .invoice {
|
||||
font-family: "Spartan";
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
<div class="container" style="margin-top: 10px;">
|
||||
<div class="invoice" >
|
||||
{{ vE.promptinvoiceSendLink }}
|
||||
</div>
|
||||
|
||||
<div class="invoice" >
|
||||
Send the invoice link to your client:
|
||||
</div>
|
||||
<div class="container" style="padding: 10px;" >
|
||||
|
||||
<table style="width:100%;
|
||||
margin-top: 10px;">
|
||||
|
@ -10,23 +10,23 @@
|
|||
<tr>
|
||||
<th class="urlLabel"
|
||||
style="text-align: left;"
|
||||
width="94%">Invoice URL:
|
||||
width="94%">{{ vE.promptinvoiceInvoiceUrl }}
|
||||
</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="urlDetail"
|
||||
style="text-align: left;"
|
||||
width="94%">
|
||||
<div>
|
||||
<textarea
|
||||
<textarea matInput readonly
|
||||
style="border: none;
|
||||
outline: none;
|
||||
width: 95%;"
|
||||
cdkTextareaAutosize
|
||||
cdkAutosizeMinRows="1"
|
||||
cdkAutosizeMaxRows="4">{{ invoiceUrl }}
|
||||
cdkAutosizeMaxRows="5">{{ invoiceUrl }}
|
||||
</textarea>
|
||||
</div>
|
||||
|
||||
|
@ -39,7 +39,7 @@
|
|||
</a>
|
||||
</td>
|
||||
|
||||
</tbody>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<mat-dialog-actions>
|
||||
|
@ -49,12 +49,12 @@
|
|||
<button mat-raised-button
|
||||
class="text"
|
||||
color="primary" (click)="confirm()">
|
||||
<mat-icon class="icon">verified_user</mat-icon>Sent!
|
||||
<mat-icon class="icon">verified_user</mat-icon>{{vE.promptinvoiceInvoiceSent}}
|
||||
</button>
|
||||
</td>
|
||||
<td align="right">
|
||||
<button mat-raised-button class="text" (click)="close()">
|
||||
<mat-icon class="icon">close</mat-icon>Cancel
|
||||
<mat-icon class="icon">close</mat-icon>{{vE.promptinvoiceInvoiceCancel}}
|
||||
</button>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
|
@ -4,6 +4,9 @@ import { MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog';
|
|||
import { NotifierService } from '../notifier.service';
|
||||
import { faCopy } from '@fortawesome/free-solid-svg-icons';
|
||||
|
||||
import { LanguageService } from '../language.service';
|
||||
import { LanguageData } from '../language.model';
|
||||
|
||||
var URLSafeBase64 = require('urlsafe-base64');
|
||||
var Buffer = require('buffer/').Buffer;
|
||||
|
||||
|
@ -15,22 +18,39 @@ var Buffer = require('buffer/').Buffer;
|
|||
|
||||
export class PromptInvoiceComponent implements OnInit {
|
||||
orderId: string;
|
||||
orderToken: string = '';
|
||||
invoiceUrl: string;
|
||||
|
||||
// ------------------------------------
|
||||
//
|
||||
faCopy = faCopy;
|
||||
// ------------------------------------
|
||||
|
||||
// -------------------------------------
|
||||
// Language Support
|
||||
//
|
||||
vE = {
|
||||
promptinvoiceSendLink : '',
|
||||
promptinvoiceNotservClose : '',
|
||||
promptinvoiceNotservError : '',
|
||||
promptinvoiceNotservSuccess : '',
|
||||
propmtinvoiceInvoiceClipboard : '',
|
||||
promptinvoiceFuncNotavail : '',
|
||||
promptinvoiceInvoiceUrl : '',
|
||||
promptinvoiceInvoiceSent : '',
|
||||
promptinvoiceInvoiceCancel : ''
|
||||
}
|
||||
//
|
||||
constructor(
|
||||
private languageService : LanguageService,
|
||||
private dialogRef: MatDialogRef<PromptInvoiceComponent>,
|
||||
@Inject(MAT_DIALOG_DATA) public data: {orderId: string},
|
||||
@Inject(MAT_DIALOG_DATA) public data: {orderId: string, orderToken: string},
|
||||
private notifierService : NotifierService ) {
|
||||
this.orderId = data.orderId;
|
||||
this.invoiceUrl = 'https://app.zgo.cash/invoice/'+this.orderId;
|
||||
this.orderToken = data.orderToken;
|
||||
this.invoiceUrl = 'https://app.zgo.cash/invoice/'+this.orderId + '?token=' + this.orderToken;
|
||||
}
|
||||
|
||||
ngOnInit(): void {
|
||||
this.chgUILanguage();
|
||||
}
|
||||
|
||||
|
||||
|
@ -49,12 +69,44 @@ export class PromptInvoiceComponent implements OnInit {
|
|||
try {
|
||||
navigator.clipboard.writeText(this.invoiceUrl);
|
||||
this.notifierService
|
||||
.showNotification("Invoice's URL copied to Clipboard!!","Close",'success');
|
||||
.showNotification(this.vE.propmtinvoiceInvoiceClipboard,
|
||||
this.vE.promptinvoiceNotservClose,
|
||||
'success',
|
||||
this.vE.promptinvoiceNotservSuccess);
|
||||
|
||||
} catch (err) {
|
||||
// console.error("Error", err);
|
||||
this.notifierService
|
||||
.showNotification("Functionality not available for your browser. Use send button instead.","Close",'error');
|
||||
.showNotification(this.vE.promptinvoiceFuncNotavail,
|
||||
this.vE.promptinvoiceNotservClose,
|
||||
'error',
|
||||
this.vE.promptinvoiceNotservError);
|
||||
}
|
||||
}
|
||||
|
||||
chgUILanguage(){
|
||||
console.log('PROMPTINVOICE.chgUILanguage Called ');
|
||||
this.languageService.getViewElements('promptinvoice').subscribe(
|
||||
response => {
|
||||
console.log('Received >> ', response );
|
||||
console.log('Language Code : ', response.language);
|
||||
console.log('Component Name : ',response.component);
|
||||
console.log('Language data : ',response.data);
|
||||
|
||||
this.vE.promptinvoiceSendLink = response.data.promptinvoice_send_link;
|
||||
this.vE.promptinvoiceNotservClose = response.data.promptinvoice_notserv_close;
|
||||
this.vE.promptinvoiceNotservError = response.data.promptinvoice_notserv_error;
|
||||
this.vE.promptinvoiceNotservSuccess = response.data.promptinvoice_notserv_success;
|
||||
this.vE.propmtinvoiceInvoiceClipboard = response.data.promptinvoice_invoice_clipboard;
|
||||
this.vE.promptinvoiceFuncNotavail = response.data.promptinvoice_func_notavail;
|
||||
this.vE.promptinvoiceInvoiceUrl = response.data.promptinvoice_invoice_url;
|
||||
this.vE.promptinvoiceInvoiceSent = response.data.promptinvoice_invoice_sent;
|
||||
this.vE.promptinvoiceInvoiceCancel = response.data.promptinvoice_invoice_cancel;
|
||||
|
||||
},
|
||||
error => { console.log('Error >> ',error); }
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
::ng-deep .mdc-button__label {
|
||||
font-family: "Spartan" sans-serif;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
::ng-deep .invoice {
|
||||
font-family: "Spartan";
|
||||
|
|
|
@ -1,16 +1,17 @@
|
|||
<div class="container" style="margin-top: 10px;">
|
||||
|
||||
<div class="invoice" >
|
||||
Send the receipt link to your client:
|
||||
</div>
|
||||
<div class="invoice" >
|
||||
{{ vE.promptreceiptSendLink }}
|
||||
</div>
|
||||
|
||||
<div class="container"
|
||||
style="margin-top: 10px;
|
||||
padding: 15px;">
|
||||
<table style="width:100%;
|
||||
margin-top: 10px;">
|
||||
<thead style="width: 100%;">
|
||||
<tr>
|
||||
<th class="urlLabel"
|
||||
style="text-align: left;"
|
||||
width="94%">Receipt URL:
|
||||
width="94%">{{ vE.promptreceiptReceiptUrl }}
|
||||
</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
|
@ -20,13 +21,13 @@
|
|||
style="text-align: left;"
|
||||
width="94%">
|
||||
<div>
|
||||
<textarea
|
||||
<textarea matInput readonly
|
||||
style="border: none;
|
||||
outline: none;
|
||||
width: 95%;"
|
||||
cdkTextareaAutosize
|
||||
cdkAutosizeMinRows="1"
|
||||
cdkAutosizeMaxRows="4">{{ receiptUrl }}
|
||||
cdkAutosizeMaxRows="5">{{ receiptUrl }}
|
||||
</textarea>
|
||||
</div>
|
||||
|
||||
|
@ -47,7 +48,7 @@
|
|||
<tr>
|
||||
<td align="right">
|
||||
<button mat-raised-button class="text" (click)="close()">
|
||||
<mat-icon class="icon">close</mat-icon>Close
|
||||
<mat-icon class="icon">close</mat-icon>{{ vE.promptreceiptCloseLbl }}
|
||||
</button>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
|
@ -5,6 +5,9 @@ import { NotifierService } from '../notifier.service';
|
|||
|
||||
import { faCopy } from '@fortawesome/free-solid-svg-icons';
|
||||
|
||||
import { LanguageService } from '../language.service';
|
||||
import { LanguageData } from '../language.model';
|
||||
|
||||
var URLSafeBase64 = require('urlsafe-base64');
|
||||
var Buffer = require('buffer/').Buffer;
|
||||
|
||||
|
@ -16,23 +19,41 @@ var Buffer = require('buffer/').Buffer;
|
|||
|
||||
export class PromptReceiptComponent implements OnInit {
|
||||
orderId: string;
|
||||
orderToken: string;
|
||||
receiptUrl: string;
|
||||
|
||||
// ------------------------------------
|
||||
//
|
||||
faCopy = faCopy;
|
||||
// ------------------------------------
|
||||
|
||||
// -------------------------------------
|
||||
//
|
||||
// Language Support
|
||||
//
|
||||
vE = {
|
||||
promptreceiptNotservClose : '',
|
||||
promptreceiptNotservError : '',
|
||||
promptreceiptNotservSuccess : '',
|
||||
propmtreceiptReceiptClipboard : '',
|
||||
promptreceiptFuncNotavail : '',
|
||||
promptreceiptSendLink : '',
|
||||
promptreceiptReceiptUrl : '',
|
||||
promptreceiptCloseLbl : ''
|
||||
}
|
||||
//
|
||||
constructor(
|
||||
private languageService : LanguageService,
|
||||
private dialogRef: MatDialogRef<PromptReceiptComponent>,
|
||||
@Inject(MAT_DIALOG_DATA) public data: {orderId: string},
|
||||
@Inject(MAT_DIALOG_DATA) public data: {orderId: string, orderToken: string},
|
||||
private notifierService : NotifierService ) {
|
||||
this.orderId = data.orderId;
|
||||
this.receiptUrl = 'https://app.zgo.cash/receipt/'+this.orderId;
|
||||
this.orderToken = data.orderToken;
|
||||
this.receiptUrl = 'https://app.zgo.cash/receipt/' + this.orderId + '?token=' + this.orderToken;
|
||||
|
||||
}
|
||||
|
||||
ngOnInit(): void {
|
||||
this.chgUILanguage();
|
||||
}
|
||||
|
||||
|
||||
|
@ -51,12 +72,42 @@ export class PromptReceiptComponent implements OnInit {
|
|||
try {
|
||||
navigator.clipboard.writeText(this.receiptUrl);
|
||||
this.notifierService
|
||||
.showNotification("Receipt's URL copied to Clipboard!!","Close",'success');
|
||||
.showNotification( this.vE.propmtreceiptReceiptClipboard,
|
||||
this.vE.promptreceiptNotservClose,
|
||||
'success',
|
||||
this.vE.promptreceiptNotservSuccess);
|
||||
|
||||
} catch (err) {
|
||||
// console.error("Error", err);
|
||||
this.notifierService
|
||||
.showNotification("Functionality not available for your browser. Use send button instead.","Close",'error');
|
||||
.showNotification( this.vE.promptreceiptFuncNotavail,
|
||||
this.vE.promptreceiptNotservClose,
|
||||
'error',
|
||||
this.vE.promptreceiptNotservError);
|
||||
}
|
||||
}
|
||||
|
||||
chgUILanguage(){
|
||||
console.log('PROMPTRECEIPT.chgUILanguage Called ');
|
||||
this.languageService.getViewElements('promptreceipt').subscribe(
|
||||
response => {
|
||||
console.log('Received >> ', response );
|
||||
console.log('Language Code : ', response.language);
|
||||
console.log('Component Name : ',response.component);
|
||||
console.log('Language data : ',response.data);
|
||||
|
||||
this.vE.promptreceiptNotservClose = response.data.promptreceipt_notserv_close;
|
||||
this.vE.promptreceiptNotservError = response.data.promptreceipt_notserv_error;
|
||||
this.vE.promptreceiptNotservSuccess = response.data.promptreceipt_notserv_success;
|
||||
this.vE.propmtreceiptReceiptClipboard = response.data.promptreceipt_receipt_clipboard;
|
||||
this.vE.promptreceiptFuncNotavail = response.data.promptreceipt_func_notavail;
|
||||
this.vE.promptreceiptSendLink = response.data.promptreceipt_send_link;
|
||||
this.vE.promptreceiptReceiptUrl = response.data.promptreceipt_receipt_url;
|
||||
this.vE.promptreceiptCloseLbl = response.data.promptreceipt_close_lbl;
|
||||
|
||||
},
|
||||
error => { console.log('Error >> ',error); }
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,22 +1,31 @@
|
|||
|
||||
.text {
|
||||
font-family: 'Spartan', sans-serif;
|
||||
}
|
||||
|
||||
.receipt {
|
||||
font-family: "Spartan";
|
||||
::ng-deep .mdc-button__label {
|
||||
font-family: "Spartan" sans-serif;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
}
|
||||
.cancelTitle {
|
||||
font-family: 'Spartan', sans-serif;
|
||||
background: #ff5722;
|
||||
font-weight: 700;
|
||||
font-size: 18px;
|
||||
text-align: center;
|
||||
color: white;
|
||||
line-height: 20px;
|
||||
padding: 10px;
|
||||
font-size: 26px;
|
||||
text-align: center;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.qrbody {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
background-color: #e8eaf0;
|
||||
margin: 15px;
|
||||
}
|
||||
|
||||
.button-area {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
margin: 15px;
|
||||
}
|
|
@ -1,18 +1,17 @@
|
|||
<div class="container" style="margin-top: 10px;">
|
||||
<div class='cancelTitle'>{{ vE.receiptqrScanReceipt }}</div>
|
||||
|
||||
<div class="receipt">
|
||||
Scan for your Receipt
|
||||
</div>
|
||||
|
||||
<div class="qrbody">
|
||||
<div id="receipt-qr"> </div>
|
||||
</div>
|
||||
<div class="qrbody">
|
||||
<div id="receipt-qr"> </div>
|
||||
</div>
|
||||
|
||||
<div class="button-area">
|
||||
<!--
|
||||
<mat-dialog-actions>
|
||||
-->
|
||||
<button mat-raised-button class="text" (click)="close()">
|
||||
<mat-icon class="icon">close</mat-icon>Close
|
||||
<mat-icon class="icon">close</mat-icon>{{ vE.receiptqrCloseBtn }}
|
||||
</button>
|
||||
</mat-dialog-actions>
|
||||
|
||||
|
||||
</div>
|
||||
<!--
|
||||
</mat-dialog-actions>
|
||||
-->
|
||||
</div>
|
||||
|
|
|
@ -2,6 +2,9 @@ import { Inject, Component, OnInit, ViewEncapsulation} from '@angular/core';
|
|||
import { MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog';
|
||||
import { DomSanitizer, SafeUrl } from '@angular/platform-browser';
|
||||
|
||||
import { LanguageService } from '../language.service';
|
||||
import { LanguageData } from '../language.model';
|
||||
|
||||
var QRCode = require('easyqrcodejs');
|
||||
|
||||
@Component({
|
||||
|
@ -12,8 +15,17 @@ var QRCode = require('easyqrcodejs');
|
|||
export class ReceiptQRComponent implements OnInit {
|
||||
receiptUrl: SafeUrl;
|
||||
codeString: string = '';
|
||||
|
||||
// -------------------------------------
|
||||
//
|
||||
// Language Support
|
||||
//
|
||||
vE = {
|
||||
receiptqrScanReceipt : '',
|
||||
receiptqrCloseBtn : ''
|
||||
}
|
||||
//
|
||||
constructor(
|
||||
private languageService : LanguageService,
|
||||
private dialogRef: MatDialogRef<ReceiptQRComponent>,
|
||||
private sanitizer: DomSanitizer,
|
||||
@Inject(MAT_DIALOG_DATA) public data: { order: string}
|
||||
|
@ -29,10 +41,28 @@ export class ReceiptQRComponent implements OnInit {
|
|||
logoWidth: 80,
|
||||
logoHeight: 80
|
||||
});
|
||||
|
||||
this.chgUILanguage();
|
||||
}
|
||||
|
||||
close() {
|
||||
this.dialogRef.close(true);
|
||||
}
|
||||
|
||||
chgUILanguage(){
|
||||
console.log('RECEIPTQR.chgUILanguage Called ');
|
||||
this.languageService.getViewElements('receiptqr').subscribe(
|
||||
response => {
|
||||
console.log('Received >> ', response );
|
||||
console.log('Language Code : ', response.language);
|
||||
console.log('Component Name : ',response.component);
|
||||
console.log('Language data : ',response.data);
|
||||
|
||||
this.vE.receiptqrScanReceipt = response.data.receiptqr_scan_receipt;
|
||||
this.vE.receiptqrCloseBtn = response.data.receiptqr_close_btn;
|
||||
|
||||
},
|
||||
error => { console.log('Error >> ',error); }
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { Injectable } from '@angular/core';
|
||||
import { Subject, BehaviorSubject, Observable } from 'rxjs';
|
||||
import { BehaviorSubject, Observable } from 'rxjs';
|
||||
import { HttpClient, HttpParams, HttpHeaders } from '@angular/common/http';
|
||||
import { Order } from './order/order.model';
|
||||
import { Owner } from './owner.model';
|
||||
|
@ -14,7 +14,8 @@ var Buffer = require('buffer/').Buffer;
|
|||
})
|
||||
export class ReceiptService {
|
||||
beUrl = ConfigData.Be_URL;
|
||||
private dataStore: {order: Order, owner: Owner } = {
|
||||
private dataStore: {order: Order, owner: Owner, name: string } = {
|
||||
name: '',
|
||||
owner: {
|
||||
_id: '',
|
||||
name: '',
|
||||
|
@ -24,22 +25,14 @@ export class ReceiptService {
|
|||
taxValue: 0,
|
||||
vat: false,
|
||||
vatValue: 0,
|
||||
first: '',
|
||||
last: '',
|
||||
email: '',
|
||||
street: '',
|
||||
city: '',
|
||||
state: '',
|
||||
postal: '',
|
||||
phone: '',
|
||||
paid: false,
|
||||
website: '',
|
||||
country: '',
|
||||
zats: false,
|
||||
invoices: false,
|
||||
expiration: new Date(Date.now()).toISOString(),
|
||||
payconf: false,
|
||||
viewkey: ''
|
||||
crmToken: '',
|
||||
viewkey: '',
|
||||
tips: false
|
||||
},
|
||||
order: {
|
||||
address: '',
|
||||
|
@ -51,6 +44,12 @@ export class ReceiptService {
|
|||
total: 0,
|
||||
totalZec: 0,
|
||||
paid: false,
|
||||
externalInvoice: '',
|
||||
shortCode: '',
|
||||
token: '',
|
||||
taxAmount: 0,
|
||||
vatAmount: 0,
|
||||
tipAmount: 0,
|
||||
lines: [
|
||||
{
|
||||
qty: 1,
|
||||
|
@ -64,31 +63,30 @@ export class ReceiptService {
|
|||
public readonly orderUpdate: Observable<Order> = this._orderUpdated.asObservable();
|
||||
public _nameUpdated: BehaviorSubject<string> = new BehaviorSubject(this.dataStore.owner.name);
|
||||
public readonly nameUpdate: Observable<string>= this._nameUpdated.asObservable();
|
||||
public readonly ownerUpdate;
|
||||
//public readonly ownerUpdate;
|
||||
private reqHeaders: HttpHeaders;
|
||||
private params: HttpParams;
|
||||
|
||||
constructor(
|
||||
constructor(
|
||||
private http: HttpClient,
|
||||
public userService: UserService
|
||||
) {
|
||||
) {
|
||||
//this.session = localStorage.getItem('s4z_token');
|
||||
this.params = new HttpParams();
|
||||
var auth = 'Basic ' + Buffer.from(ConfigData.UsrPwd).toString('base64');
|
||||
this.reqHeaders = new HttpHeaders().set('Authorization', auth);
|
||||
this.ownerUpdate = userService.ownerUpdate;
|
||||
}
|
||||
//this.ownerUpdate = userService.ownerUpdate;
|
||||
}
|
||||
|
||||
getOrderById(id:string) {
|
||||
//const params = new HttpParams().append('id', id);
|
||||
let obs = this.http.get<{message: string, order: any}>(this.beUrl+'api/order/'+id, { headers:this.reqHeaders, observe: 'response'});
|
||||
getOrderById(id:string, token: string) {
|
||||
let obs = this.http.get<{message: string, order: any, shop: string}>(this.beUrl+'order/'+id, { headers:this.reqHeaders, params: this.params.append("token", token), observe: 'response'});
|
||||
|
||||
obs.subscribe((OrderDataResponse) => {
|
||||
if (OrderDataResponse.status == 200) {
|
||||
this.dataStore.order = OrderDataResponse.body!.order;
|
||||
this.dataStore.name = OrderDataResponse.body!.shop;
|
||||
this._orderUpdated.next(Object.assign({}, this.dataStore).order);
|
||||
this.userService.getOwner(this.dataStore.order.address);
|
||||
this.ownerUpdate.subscribe((owner) => {
|
||||
this.dataStore.owner = owner;
|
||||
this._nameUpdated.next(Object.assign({}, this.dataStore).owner.name);
|
||||
});
|
||||
this._nameUpdated.next(Object.assign({}, this.dataStore).name);
|
||||
} else {
|
||||
this._orderUpdated.next(Object.assign({}, this.dataStore).order);
|
||||
console.log('No order found');
|
||||
|
|
|
@ -9,14 +9,14 @@
|
|||
<div class="invoiceDetail"
|
||||
*ngIf="!error"
|
||||
id="invoice">
|
||||
<div class="invoiceHdrTxt1">Receipt</div>
|
||||
<div class="invoiceHdrTxt2">Order ID: {{orderId}}</div>
|
||||
<div class="invoiceHdrTxt3">Date:{{order.timestamp | date}}
|
||||
<div class="invoiceHdrTxt1">{{ vE.receiptReceiptLbl }}</div>
|
||||
<div class="invoiceHdrTxt2">{{ vE.receiptOrderId }}{{orderId}}</div>
|
||||
<div class="invoiceHdrTxt3">{{ vE.receiptOrderDate }}{{order.timestamp | date}}
|
||||
</div>
|
||||
<div style="height: 10px;"></div>
|
||||
<div class="zecData">Zcash Price: {{order.price | number: '1.02' | currency: order.currency.toUpperCase()}}</div>
|
||||
<div class="zecData">{{ vE.receiptZcashPrice }}{{order.price | number: '1.02' | currency: order.currency.toUpperCase()}}</div>
|
||||
<div style="height: 2px;"></div>
|
||||
<div class="zecData">Total: <img class="zecSign" src="/assets/zec_rv.png" />{{order.totalZec | number: '1.08'}}
|
||||
<div class="zecData">{{ vE.receiptOrderTotal }}<img class="zecSign" src="/assets/zec_rv.png" />{{order.totalZec | number: '1.08'}}
|
||||
</div>
|
||||
<div>
|
||||
<div style="height: 10px;"></div>
|
||||
|
@ -29,11 +29,11 @@
|
|||
</th>
|
||||
<th width="15%"
|
||||
class="detailTitle1">
|
||||
Qty.
|
||||
{{ vE.receiptQtyLbl }}
|
||||
</th>
|
||||
<th width="30%"
|
||||
class="detailTitle2">
|
||||
Price ({{order.currency.toUpperCase()}})
|
||||
{{ vE.receiptOrderPrice }} ({{order.currency.toUpperCase()}})
|
||||
</th>
|
||||
</tr>
|
||||
<tr class="invoice-detail"
|
||||
|
@ -51,6 +51,24 @@
|
|||
{{( item.qty * item.cost ) | number : '1.02' | currency: order.currency.toUpperCase()}}
|
||||
</td>
|
||||
</tr>
|
||||
<tr *ngIf="order.taxAmount > 0">
|
||||
<td class="newOrdertbdetail" style="text-align: right;">{{ vE.receiptTax }}</td>
|
||||
<td class="newOrdertbdetail" style="text-align: right;"></td>
|
||||
<td class="newOrdertbdetail" style="text-align: right;">{{ order.taxAmount | currency: order.currency.toUpperCase() }}</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr *ngIf="order.vatAmount > 0">
|
||||
<td class="newOrdertbdetail" style="text-align: right;">{{ vE.receiptVAT }}</td>
|
||||
<td class="newOrdertbdetail" style="text-align: right;"></td>
|
||||
<td class="newOrdertbdetail" style="text-align: right;">{{ order.vatAmount | currency: order.currency.toUpperCase() }}</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr *ngIf="order.tipAmount > 0">
|
||||
<td class="newOrdertbdetail" style="text-align: right;">{{ vE.receiptTip }}</td>
|
||||
<td class="newOrdertbdetail" style="text-align: right;"></td>
|
||||
<td class="newOrdertbdetail" style="text-align: right;">{{ order.tipAmount | currency: order.currency.toUpperCase() }}</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr class="invoice-title">
|
||||
<th width="55%"
|
||||
class="detailLineRight">
|
||||
|
@ -77,12 +95,12 @@
|
|||
font-size: 20px;
|
||||
padding: 4px;
|
||||
height: 24px;">
|
||||
Incorrect Receipt ID.
|
||||
{{ vE.receiptInvalidId }}
|
||||
</div>
|
||||
<div style="font-family: Spartan !important;
|
||||
font-size: 16px;
|
||||
padding: 4px;">
|
||||
No information available.
|
||||
{{ vE.receiptInfoNotavail }}
|
||||
</div>
|
||||
<div style="height: 10px;"></div>
|
||||
<mat-card-actions>
|
||||
|
@ -92,4 +110,4 @@
|
|||
</mat-card-actions>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -4,6 +4,9 @@ import { Order} from '../order/order.model';
|
|||
import { ReceiptService } from '../receipt.service';
|
||||
import { Observable } from 'rxjs';
|
||||
|
||||
import { LanguageService } from '../language.service';
|
||||
import { LanguageData } from '../language.model';
|
||||
|
||||
@Component({
|
||||
selector: 'app-receipt',
|
||||
templateUrl: './receipt.component.html',
|
||||
|
@ -11,6 +14,7 @@ import { Observable } from 'rxjs';
|
|||
})
|
||||
export class ReceiptComponent implements OnInit {
|
||||
orderId;
|
||||
orderToken: string = '';
|
||||
public orderUpdate: Observable<Order>;
|
||||
public nameUpdate: Observable<string>;
|
||||
name: string = '';
|
||||
|
@ -25,6 +29,12 @@ export class ReceiptComponent implements OnInit {
|
|||
total: 0,
|
||||
totalZec: 0,
|
||||
paid: false,
|
||||
externalInvoice: '',
|
||||
shortCode: '',
|
||||
token: '',
|
||||
taxAmount: 0,
|
||||
vatAmount: 0,
|
||||
tipAmount: 0,
|
||||
lines: [
|
||||
{
|
||||
qty: 1,
|
||||
|
@ -33,25 +43,74 @@ export class ReceiptComponent implements OnInit {
|
|||
}
|
||||
]
|
||||
};
|
||||
// -------------------------------------
|
||||
//
|
||||
// Language Support
|
||||
//
|
||||
vE = {
|
||||
receiptReceiptLbl : '',
|
||||
receiptOrderId : '',
|
||||
receiptOrderDate : '',
|
||||
receiptZcashPrice : '',
|
||||
receiptOrderTotal : '',
|
||||
receiptQtyLbl : '',
|
||||
receiptOrderPrice : '',
|
||||
receiptInvalidId : '',
|
||||
receiptInfoNotavail : '',
|
||||
receiptTax : '',
|
||||
receiptVAT : '',
|
||||
receiptTip : ''
|
||||
}
|
||||
|
||||
constructor(
|
||||
private languageService : LanguageService,
|
||||
private _ActiveRoute:ActivatedRoute,
|
||||
public receiptService: ReceiptService
|
||||
) {
|
||||
this.orderId = this._ActiveRoute.snapshot.paramMap.get("orderId");
|
||||
this._ActiveRoute.queryParams.subscribe((params) => {
|
||||
this.orderToken = params["token"];
|
||||
receiptService.getOrderById(this.orderId!, this.orderToken!);
|
||||
});
|
||||
this.orderUpdate = receiptService.orderUpdate;
|
||||
this.nameUpdate = receiptService.nameUpdate;
|
||||
receiptService.getOrderById(this.orderId!);
|
||||
this.orderUpdate.subscribe(order => {
|
||||
this.order = order;
|
||||
});
|
||||
this.nameUpdate = receiptService.nameUpdate;
|
||||
|
||||
this.nameUpdate.subscribe(name => {
|
||||
this.name = name;
|
||||
});
|
||||
}
|
||||
|
||||
ngOnInit(): void {
|
||||
}
|
||||
ngOnInit(): void {
|
||||
this.chgUILanguage();
|
||||
}
|
||||
|
||||
chgUILanguage(){
|
||||
console.log('RECEIPT.chgUILanguage Called ');
|
||||
this.languageService.getViewElements('receipt').subscribe(
|
||||
response => {
|
||||
console.log('Received >> ', response );
|
||||
console.log('Language Code : ', response.language);
|
||||
console.log('Component Name : ',response.component);
|
||||
console.log('Language data : ',response.data);
|
||||
|
||||
this.vE.receiptReceiptLbl = response.data.receipt_receipt_lbl;
|
||||
this.vE.receiptOrderId = response.data.receipt_order_id;
|
||||
this.vE.receiptOrderDate = response.data.receipt_order_date;
|
||||
this.vE.receiptZcashPrice = response.data.receipt_zcash_price;
|
||||
this.vE.receiptOrderTotal = response.data.receipt_order_total;
|
||||
this.vE.receiptQtyLbl = response.data.receipt_qty_lbl;
|
||||
this.vE.receiptOrderPrice = response.data.receipt_order_price;
|
||||
this.vE.receiptInvalidId = response.data.receipt_invalid_id;
|
||||
this.vE.receiptInfoNotavail = response.data.receipt_info_notavail;
|
||||
this.vE.receiptTax = response.data.receipt_tax;
|
||||
this.vE.receiptVAT = response.data.receipt_vat;
|
||||
this.vE.receiptTip = response.data.receipt_tip;
|
||||
},
|
||||
error => { console.log('Error >> ',error); }
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,12 +1,80 @@
|
|||
.text {
|
||||
font-family: 'Spartan', sans-serif;
|
||||
}
|
||||
|
||||
.scan_header {
|
||||
font-family: 'Spartan', sans-serif;
|
||||
font-size: 24px;
|
||||
font-weight: 600;
|
||||
text-align: center;
|
||||
padding: 10px;
|
||||
color: white;
|
||||
background: #ff5722;
|
||||
}
|
||||
|
||||
.scan_qrcode {
|
||||
|
||||
}
|
||||
|
||||
.scan_message {
|
||||
font-family: 'Spartan', sans-serif;
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
text-align: center;
|
||||
color: black;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.scan_message2 {
|
||||
font-family: 'Spartan', sans-serif;
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
text-align: center;
|
||||
color: black;
|
||||
padding-top: 30px;
|
||||
padding-bottom: 30px;
|
||||
}
|
||||
|
||||
.scan_button_send {
|
||||
font-family: 'Spartan', sans-serif;
|
||||
font-size: 12px;
|
||||
font-weight: 500;
|
||||
text-align: center;
|
||||
color: white;
|
||||
background: #ff5722;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.scan_button_close {
|
||||
font-family: 'Spartan', sans-serif;
|
||||
font-size: 12px;
|
||||
font-weight: 500;
|
||||
text-align: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.scan_button_row1 {
|
||||
font-family: 'Spartan', sans-serif;
|
||||
font-size: 12px;
|
||||
align-items: center;
|
||||
height: 30px;
|
||||
}
|
||||
|
||||
.scan_button_row2 {
|
||||
font-family: 'Spartan', sans-serif;
|
||||
font-size: 20px;
|
||||
height: 30px;
|
||||
padding: 20px;
|
||||
padding-top: 20px;
|
||||
padding-left: 20px;
|
||||
padding-right: 20px;
|
||||
padding-bottom: 20px;
|
||||
}
|
||||
|
||||
.mat-dialog-title{
|
||||
line-height: 20px;
|
||||
}
|
||||
h4.text{
|
||||
margin: 0px;
|
||||
}
|
||||
|
||||
.small {
|
||||
font-size: small;
|
||||
}
|
||||
|
|
|
@ -1,32 +1,53 @@
|
|||
<div align="center" mat-dialog-title>
|
||||
<h4 class="text">Scan the QR code</h4>
|
||||
<div class="scan_header">{{ vE.scanScanqrCode }}
|
||||
</div>
|
||||
|
||||
<mat-dialog-content>
|
||||
<div align="center">
|
||||
<p class="text">Ensure to check the "Include Reply-To" box in your wallet before sending your memo.</p>
|
||||
<div class="qrcode" id="checkout-qr"></div>
|
||||
</div>
|
||||
</mat-dialog-content>
|
||||
<mat-dialog-actions>
|
||||
<table cellspacing="0" width="100%">
|
||||
<tr>
|
||||
<td>
|
||||
<button mat-raised-button class="text" color="primary" (click)="confirm()">
|
||||
<mat-icon class="icon">verified_user</mat-icon>Memo Sent!
|
||||
</button>
|
||||
</td>
|
||||
<td align="right">
|
||||
<button mat-raised-button class="text" (click)="close()">
|
||||
<mat-icon class="icon">close</mat-icon>Cancel
|
||||
</button>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</mat-dialog-actions>
|
||||
<div align="center">
|
||||
<p class="small text">Can't scan? Use this <a [href]="zcashUrl">wallet link</a>, or</p>
|
||||
<button class="small text" (click)="copyAddress()">Copy Address</button>
|
||||
<button class="small text" (click)="copyAmount()">Copy Amount</button>
|
||||
<button class="small text" (click)="copyMemo()">Copy Memo</button>
|
||||
<p class="scan_message">{{ vE.scanTextInfo }}</p>
|
||||
<div class="scan_qrcode" id="checkout-qr"></div>
|
||||
</div>
|
||||
<!-- </mat-dialog-content>
|
||||
-->
|
||||
<table width="100%">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<button mat-raised-button class="scan_button_send" (click)="confirm()">
|
||||
<mat-icon class="icon">verified_user</mat-icon>{{ vE.scanMemoSent }}
|
||||
</button>
|
||||
</td>
|
||||
<td align="center">
|
||||
<button mat-raised-button class="scan_button_close" (click)="close()">
|
||||
<mat-icon class="icon">close</mat-icon>{{ vE.scanCloseBtn }}
|
||||
</button>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<div class='scan_message2'>
|
||||
{{ vE.scanCantScan }}<br> {{ vE.scanUseThis }}<a [href]="zcashUrl">{{vE.scanWalletLink}}</a>,<br>{{ vE.scanOrButton }}
|
||||
</div>
|
||||
|
||||
<table style="width:100%;
|
||||
padding-left: 30px;
|
||||
padding-right: 30px;">
|
||||
<tr>
|
||||
<td align="center" style="width: 45%;">
|
||||
<button style="font-size: 14px;" (click)="copyAddress()">{{ vE.scanCopyAddress }}</button>
|
||||
</td>
|
||||
<td style="width: 10%;"></td>
|
||||
<td align="center" style="width: 45%;">
|
||||
<button style="font-size: 14px;" (click)="copyAmount()">{{ vE.scanCopyAmount }}</button>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<table style="width:100%;
|
||||
padding-top: 10px;
|
||||
padding-left: 30px;
|
||||
padding-right: 30px;
|
||||
padding-bottom: 10px;">
|
||||
<tr>
|
||||
<td align="center" >
|
||||
<button style="font-size: 14px;" (click)="copyMemo()">{{ vE.scanCopyMemo }}</button>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
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 { NotifierService } from '../notifier.service';
|
||||
|
||||
import { LanguageService } from '../language.service';
|
||||
|
||||
var QRCode = require('easyqrcodejs');
|
||||
var URLSafeBase64 = require('urlsafe-base64');
|
||||
var Buffer = require('buffer/').Buffer;
|
||||
|
@ -21,8 +23,31 @@ export class ScanComponent implements OnInit{
|
|||
codeString: string = '';
|
||||
pay: boolean = false;
|
||||
zcashUrl: SafeUrl;
|
||||
|
||||
// -------------------------------------
|
||||
//
|
||||
// Language Support
|
||||
//
|
||||
vE = {
|
||||
scanScanqrCode : '',
|
||||
scanTextInfo : '',
|
||||
scanMemoSent : '',
|
||||
scanCloseBtn : '',
|
||||
scanUseThis : '',
|
||||
scanWalletLink : '',
|
||||
scanCopyAddress : '',
|
||||
scanCopyAmount : '',
|
||||
scanCopyMemo : '',
|
||||
scanNotservClose : '',
|
||||
scanNotservError : '',
|
||||
scanFuncNotavail : '',
|
||||
scanCopyError : '',
|
||||
scanFailPayment : '',
|
||||
scanCantScan : '',
|
||||
scanOrButton : ''
|
||||
}
|
||||
//
|
||||
constructor(
|
||||
private languageService : LanguageService,
|
||||
private dialogRef: MatDialogRef<ScanComponent>,
|
||||
private sanitizer: DomSanitizer,
|
||||
@Inject(MAT_DIALOG_DATA) public data: { totalZec: number, addr: string, session: string, pay: boolean},
|
||||
|
@ -47,6 +72,7 @@ export class ScanComponent implements OnInit{
|
|||
logoWidth: 80,
|
||||
logoHeight: 80
|
||||
});
|
||||
this.chgUILanguage();
|
||||
}
|
||||
|
||||
confirm() {
|
||||
|
@ -61,7 +87,10 @@ export class ScanComponent implements OnInit{
|
|||
if (!navigator.clipboard) {
|
||||
alert("Copy functionality not supported");
|
||||
this.notifierService
|
||||
.showNotification("Copy functionality not supported","Close","error");
|
||||
.showNotification( this.vE.scanFuncNotavail,
|
||||
this.vE.scanNotservClose,
|
||||
'error',
|
||||
this.vE.scanNotservError);
|
||||
}
|
||||
try {
|
||||
navigator.clipboard.writeText(this.address);
|
||||
|
@ -74,13 +103,19 @@ export class ScanComponent implements OnInit{
|
|||
if (!navigator.clipboard) {
|
||||
// alert("Copy functionality not supported");
|
||||
this.notifierService
|
||||
.showNotification("Copy functionality not supported","Close","error");
|
||||
.showNotification( this.vE.scanFuncNotavail ,
|
||||
this.vE.scanNotservClose,
|
||||
'error',
|
||||
this.vE.scanNotservError);
|
||||
}
|
||||
try {
|
||||
navigator.clipboard.writeText(this.total.toString());
|
||||
} catch (err) {
|
||||
this.notifierService
|
||||
.showNotification("Error while copying ammount","Close","error");
|
||||
.showNotification(this.vE.scanCopyError,
|
||||
this.vE.scanNotservClose,
|
||||
'error',
|
||||
this.vE.scanNotservError);
|
||||
// console.error("Error", err);
|
||||
}
|
||||
}
|
||||
|
@ -89,7 +124,10 @@ export class ScanComponent implements OnInit{
|
|||
if (!navigator.clipboard) {
|
||||
// alert("Copy functionality not supported");
|
||||
this.notifierService
|
||||
.showNotification("Copy functionality not supported","Close","error");
|
||||
.showNotification(this.vE.scanFuncNotavail ,
|
||||
this.vE.scanNotservClose,
|
||||
'error',
|
||||
this.vE.scanNotservError);
|
||||
}
|
||||
try {
|
||||
if (this.pay) {
|
||||
|
@ -100,8 +138,42 @@ export class ScanComponent implements OnInit{
|
|||
} catch (err) {
|
||||
|
||||
this.notifierService
|
||||
.showNotification("Error while verifying payment","Close","error");
|
||||
.showNotification(this.vE.scanFailPayment,
|
||||
this.vE.scanNotservClose,
|
||||
'error',
|
||||
this.vE.scanNotservError);
|
||||
// console.error("Error", err);
|
||||
}
|
||||
}
|
||||
|
||||
chgUILanguage(){
|
||||
//console.log('SCAN.chgUILanguage Called ');
|
||||
this.languageService.getViewElements('scan').subscribe({
|
||||
next:
|
||||
response => {
|
||||
//console.log('Received >> ', response );
|
||||
//console.log('Language Code : ', response.language);
|
||||
//console.log('Component Name : ',response.component);
|
||||
//console.log('Language data : ',response.data);
|
||||
|
||||
this.vE.scanScanqrCode = response.data.scan_scanqr_code;
|
||||
this.vE.scanTextInfo = response.data.scan_text_info;
|
||||
this.vE.scanMemoSent = response.data.scan_memo_sent;
|
||||
this.vE.scanCloseBtn = response.data.scan_close_btn;
|
||||
this.vE.scanUseThis = response.data.scan_use_this;
|
||||
this.vE.scanWalletLink = response.data.scan_wallet_link;
|
||||
this.vE.scanCopyAddress = response.data.scan_copy_address;
|
||||
this.vE.scanCopyAmount = response.data.scan_copy_amount;
|
||||
this.vE.scanCopyMemo = response.data.scan_copy_memo;
|
||||
this.vE.scanNotservClose = response.data.scan_notserv_close;
|
||||
this.vE.scanNotservError = response.data.scan_notserv_error;
|
||||
this.vE.scanFuncNotavail = response.data.scan_func_notavail;
|
||||
this.vE.scanCantScan = response.data.scan_cant_scan;
|
||||
this.vE.scanOrButton = response.data.scan_or_button;
|
||||
|
||||
},
|
||||
error: error => { console.log('Error >> ',error); }
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
|
20
src/app/sessionpay/sessionpay.component.css
Normal file
20
src/app/sessionpay/sessionpay.component.css
Normal file
|
@ -0,0 +1,20 @@
|
|||
|
||||
* {
|
||||
font-family: 'Spartan', sans-serif;
|
||||
}
|
||||
|
||||
.settings-title {
|
||||
font-family: 'Spartan', sans-serif;
|
||||
background: #ff5722;
|
||||
color: white;
|
||||
font-size: 30px;
|
||||
text-align: center;
|
||||
padding: 5px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.container {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
15
src/app/sessionpay/sessionpay.component.html
Normal file
15
src/app/sessionpay/sessionpay.component.html
Normal file
|
@ -0,0 +1,15 @@
|
|||
<div class="settings-title">Purchase Session</div>
|
||||
<mat-card [formGroup]="payForm">
|
||||
<mat-form-field appearance="outline">
|
||||
<mat-label>Select session:</mat-label>
|
||||
<mat-select formControlName="session">
|
||||
<mat-option *ngFor="let ticket of tickets" [value]="ticket.value">
|
||||
{{ticket.viewValue}}
|
||||
</mat-option>
|
||||
</mat-select>
|
||||
</mat-form-field>
|
||||
<div class="container">
|
||||
<button mat-raised-button (click)="close()">Cancel</button>
|
||||
<button mat-raised-button color="primary" [disabled]="payForm.invalid" (click)="pay()">Pay</button>
|
||||
</div>
|
||||
</mat-card>
|
23
src/app/sessionpay/sessionpay.component.spec.ts
Normal file
23
src/app/sessionpay/sessionpay.component.spec.ts
Normal file
|
@ -0,0 +1,23 @@
|
|||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { SessionpayComponent } from './sessionpay.component';
|
||||
|
||||
describe('SessionpayComponent', () => {
|
||||
let component: SessionpayComponent;
|
||||
let fixture: ComponentFixture<SessionpayComponent>;
|
||||
|
||||
beforeEach(async () => {
|
||||
await TestBed.configureTestingModule({
|
||||
declarations: [ SessionpayComponent ]
|
||||
})
|
||||
.compileComponents();
|
||||
|
||||
fixture = TestBed.createComponent(SessionpayComponent);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
it('should create', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
});
|
68
src/app/sessionpay/sessionpay.component.ts
Normal file
68
src/app/sessionpay/sessionpay.component.ts
Normal file
|
@ -0,0 +1,68 @@
|
|||
import { Inject, Component } from '@angular/core';
|
||||
import { ScanComponent } from '../scan/scan.component';
|
||||
import { Validators, UntypedFormGroup, FormBuilder } from '@angular/forms';
|
||||
import { MatDialog, MatDialogConfig, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog';
|
||||
|
||||
@Component({
|
||||
selector: 'app-sessionpay',
|
||||
templateUrl: './sessionpay.component.html',
|
||||
styleUrls: ['./sessionpay.component.css']
|
||||
})
|
||||
export class SessionpayComponent {
|
||||
|
||||
nodeAddress: string = '';
|
||||
zecPrice: number = 1;
|
||||
tickets = [
|
||||
{
|
||||
value: 1,
|
||||
viewValue: '1 day: USD $1'
|
||||
},{
|
||||
value: 6,
|
||||
viewValue: '1 week: USD $6'
|
||||
},{
|
||||
value: 22,
|
||||
viewValue: '1 month: USD $22'
|
||||
},{
|
||||
value: 30,
|
||||
viewValue: '1 month Pro: USD $30'
|
||||
}
|
||||
];
|
||||
payForm: UntypedFormGroup;
|
||||
session: string;
|
||||
|
||||
constructor(
|
||||
private dialog: MatDialog,
|
||||
private dialogRef: MatDialogRef<SessionpayComponent>,
|
||||
private fb: FormBuilder,
|
||||
@Inject(MAT_DIALOG_DATA) public data: { addr: string, session: string, zecPrice: number }
|
||||
) {
|
||||
this.payForm= fb.group({
|
||||
session: ['', Validators.required]
|
||||
});
|
||||
this.session = data.session;
|
||||
this.zecPrice = data.zecPrice;
|
||||
this.nodeAddress = data.addr;
|
||||
}
|
||||
|
||||
pay(){
|
||||
const dialogConfig = new MatDialogConfig();
|
||||
|
||||
dialogConfig.disableClose = true;
|
||||
dialogConfig.autoFocus = true;
|
||||
dialogConfig.data = {
|
||||
totalZec: (this.payForm.get('session')!.value)/this.zecPrice,
|
||||
addr: this.nodeAddress,
|
||||
session: this.session,
|
||||
pay: true
|
||||
};
|
||||
|
||||
const dialogRef1 = this.dialog.open(ScanComponent, dialogConfig);
|
||||
dialogRef1.afterClosed().subscribe(val => {
|
||||
this.dialogRef.close();
|
||||
});
|
||||
}
|
||||
|
||||
close(){
|
||||
this.dialogRef.close();
|
||||
}
|
||||
}
|
|
@ -2,6 +2,11 @@
|
|||
font-family: 'Spartan', sans-serif;
|
||||
}
|
||||
|
||||
::ng-deep .mdc-tab__text-label {
|
||||
font-family: 'Spartan', sans-serif;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.settings-title {
|
||||
font-family: 'Spartan', sans-serif;
|
||||
background: #ff5722;
|
||||
|
@ -23,3 +28,37 @@
|
|||
.mat-slide-toggle-content {
|
||||
font-family: 'Spartan', sans-serif;
|
||||
}
|
||||
|
||||
.full-width {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.urlLabel {
|
||||
font-family: "Spartan";
|
||||
font-size: 13px;
|
||||
color: dimgray;
|
||||
}
|
||||
|
||||
.urlDetail {
|
||||
font-family: "Spartan";
|
||||
font-size: 10px;
|
||||
color: black;
|
||||
}
|
||||
|
||||
.urlCopyBtn {
|
||||
cursor: pointer;
|
||||
color: dodgerblue;
|
||||
}
|
||||
|
||||
.small {
|
||||
font-size: 12px;
|
||||
background: #dddddd;
|
||||
}
|
||||
|
||||
.heading {
|
||||
padding-top: 10px;
|
||||
}
|
||||
|
||||
.toolbar {
|
||||
padding: 12px;
|
||||
}
|
||||
|
|
|
@ -1,56 +1,303 @@
|
|||
|
||||
<div class="settings-title">Settings</div>
|
||||
<div class="settings-title"> {{ vE.settingsViewTitle }}</div>
|
||||
|
||||
<div class="container" style="margin-top: 10px;">
|
||||
<mat-dialog-content [formGroup]="settingsForm">
|
||||
<mat-form-field class="settings-field" [style.width.%]="100">
|
||||
<mat-label>Name</mat-label>
|
||||
<input matInput
|
||||
width="100%"
|
||||
placeholder="Name"
|
||||
formControlName="name">
|
||||
</mat-form-field>
|
||||
<mat-form-field [style.width.%]="100" >
|
||||
<mat-label>Currency</mat-label>
|
||||
<mat-select formControlName="currency">
|
||||
<mat-option *ngFor="let coin of coins"
|
||||
[value]="coin.symbol">
|
||||
{{coin.label}}
|
||||
</mat-option>
|
||||
</mat-select>
|
||||
</mat-form-field>
|
||||
<mat-slide-toggle formControlName="useZats"
|
||||
class="settings-toggle"
|
||||
(change)="onChange($event)">
|
||||
Use zatoshis?
|
||||
</mat-slide-toggle>
|
||||
<pre></pre>
|
||||
<mat-slide-toggle formControlName="useVKey"
|
||||
class="settings-toggle"
|
||||
(change)="onChangeVKeyOn($event)">
|
||||
Confirm payments?
|
||||
</mat-slide-toggle>
|
||||
<pre></pre>
|
||||
<mat-form-field [style.width.%]="100">
|
||||
<mat-label>Viewing key</mat-label>
|
||||
<input matInput placeholder="Your wallet viewing key"
|
||||
formControlName="vKey">
|
||||
</mat-form-field>
|
||||
<div class="container"
|
||||
style="margin-top: 10px;
|
||||
height: 700px;
|
||||
margin-left: 10px;
|
||||
margin-right: 10px;">
|
||||
<mat-tab-group mat-tab-align-tabs="start">
|
||||
<mat-tab label="{{ vE.settingsTabMainlbl }}"
|
||||
style="height: 620px;">
|
||||
<div class="container" style="margin-bottom: 20px;">
|
||||
<mat-dialog-content [formGroup]="settingsForm">
|
||||
<mat-form-field class="settings-field" [style.width.%]="100">
|
||||
<mat-label>{{ vE.settingsNameLbl }}</mat-label>
|
||||
<input matInput
|
||||
width="100%"
|
||||
placeholder="{{ vE.settingsNamePlaceholder }}"
|
||||
formControlName="name">
|
||||
</mat-form-field>
|
||||
<mat-form-field [style.width.%]="100" >
|
||||
<mat-label>{{ vE.settingsCurrencyLbl }}</mat-label>
|
||||
<mat-select formControlName="currency">
|
||||
<mat-option *ngFor="let coin of coins"
|
||||
[value]="coin.symbol">
|
||||
{{coin.label}}
|
||||
</mat-option>
|
||||
</mat-select>
|
||||
</mat-form-field>
|
||||
<mat-slide-toggle formControlName="useZats"
|
||||
class="settings-toggle"
|
||||
(change)="onChange($event)">
|
||||
{{ vE.settingsUseSatoshi }}
|
||||
</mat-slide-toggle>
|
||||
<pre></pre>
|
||||
<mat-slide-toggle formControlName="useVKey"
|
||||
class="settings-toggle"
|
||||
(change)="onChangeVKeyOn($event)">
|
||||
{{ vE.settingsConfirmPayments }}
|
||||
</mat-slide-toggle>
|
||||
<pre></pre>
|
||||
<mat-form-field class="full-width"
|
||||
appearance="fill">
|
||||
<mat-label>{{ vE.settingsVkeyLbl }}</mat-label>
|
||||
<textarea matInput [readonly]="vKaccess" placeholder="{{ vE.settingsVkeyPlaceholder }}"
|
||||
formControlName="vKey">
|
||||
</textarea>
|
||||
</mat-form-field>
|
||||
<table cellspacing="0" style="width: 100%">
|
||||
<!--
|
||||
<colgroup>
|
||||
<col span="1" style="width: 20%;">
|
||||
<col span="1" style="width: 40%;">
|
||||
<col span="1" style="width: 40%;">
|
||||
</colgroup>
|
||||
-->
|
||||
<tr>
|
||||
<td>
|
||||
<mat-slide-toggle formControlName="useTips" class="settings-toggle" (change)="onChangeTips($event)">
|
||||
{{ vE.settingsUseTips }}
|
||||
</mat-slide-toggle>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td >
|
||||
<mat-slide-toggle formControlName="useTax" class="settings-toggle" (change)="onChangeTax($event)">
|
||||
{{ vE.settingsUseTax }}
|
||||
</mat-slide-toggle>
|
||||
<br>
|
||||
<mat-form-field *ngIf="useTax" class="settings-field" [style.width.%]="100">
|
||||
<mat-label> {{ vE.settingsSalesTaxRateLbl }}</mat-label>
|
||||
<input matInput
|
||||
type="number"
|
||||
placeholder="{{ vE.settingsSalesTaxRateTxt }}"
|
||||
formControlName="taxRate">
|
||||
</mat-form-field>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<mat-slide-toggle formControlName="useVat" class="settings-toggle" (change)="onChangeVat($event)">
|
||||
{{ vE.settingsUseVAT }}
|
||||
</mat-slide-toggle>
|
||||
<br>
|
||||
<mat-form-field *ngIf="useVat" class="settings-field" [style.width.%]="100">
|
||||
<mat-label>{{ vE.settingsSalesVATRateLbl }} </mat-label>
|
||||
<input matInput
|
||||
type="number"
|
||||
placeholder="{{ vE.settingsSalesVATRateTxt }}"
|
||||
formControlName="vatRate">
|
||||
</mat-form-field>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</mat-dialog-content>
|
||||
</div>
|
||||
<div class="container"
|
||||
style="display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-top: -20px;">
|
||||
<button mat-raised-button
|
||||
(click)="close()">
|
||||
{{ vE.settingsCloseBtn }}
|
||||
</button>
|
||||
<button mat-raised-button
|
||||
color="primary"
|
||||
(click)="save()">
|
||||
{{ vE.settingsSaveBtn }}
|
||||
</button>
|
||||
</div>
|
||||
<!--
|
||||
<div style="height: 20px;
|
||||
margin-top: 10px;">
|
||||
</div>
|
||||
-->
|
||||
</mat-tab>
|
||||
<mat-tab *ngIf="proVersion"
|
||||
label="{{ vE.settingsTabIntegrations }}"
|
||||
style="align-items: center;">
|
||||
<mat-tab-group mat-tab-align-tabs="start">
|
||||
<mat-tab label="{{ vE.settingsXeroLbl }}">
|
||||
<div class="container" style="margin-bottom: 10px;">
|
||||
<mat-dialog-content [formGroup]="accCodForm">
|
||||
<div style="height: 5px;">
|
||||
</div>
|
||||
<div class="container"
|
||||
style="height: 300;">
|
||||
<p style="text-align:center">
|
||||
<a mat-raised-button
|
||||
color="primary"
|
||||
href="{{this.xeroLink}}">
|
||||
{{ linkMsg }}
|
||||
</a>
|
||||
</p>
|
||||
|
||||
</mat-dialog-content>
|
||||
<table *ngIf="linked2Xero"
|
||||
[style.width.%]="100"
|
||||
style="margin-top: 5px;">
|
||||
<thead style="width: 100%;">
|
||||
<tr>
|
||||
<th class="urlLabel"
|
||||
style="text-align: left;"
|
||||
width="94%">{{ vE.settingsPmtservURL }}
|
||||
</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<td class="urlDetail"
|
||||
style="text-align: left;"
|
||||
width="94%">
|
||||
<div>
|
||||
<textarea disabled
|
||||
style="font-size: 10px !important;
|
||||
border: none;
|
||||
outline: none;
|
||||
min-height: 150px;
|
||||
width: 95%;"
|
||||
cdkTextareaAutosize
|
||||
cdkAutosizeMinRows="6"
|
||||
cdkAutosizeMaxRows="10">{{ pmtServiceURL }}
|
||||
</textarea>
|
||||
</div>
|
||||
|
||||
<mat-dialog-actions style="display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-top: 12px;">
|
||||
<button mat-raised-button
|
||||
(click)="close()">
|
||||
Cancel
|
||||
</button>
|
||||
<button mat-raised-button
|
||||
color="primary"
|
||||
(click)="save()">
|
||||
Save
|
||||
</button>
|
||||
</mat-dialog-actions>
|
||||
</td>
|
||||
<td class="urlCopyBtn">
|
||||
<a (click)='copyUrl()' >
|
||||
<fa-icon [icon]="faCopy"
|
||||
class="copy-button">
|
||||
</fa-icon>
|
||||
</a>
|
||||
</td>
|
||||
</tbody>
|
||||
</table>
|
||||
<div style="height: 5px;">
|
||||
</div>
|
||||
<mat-form-field *ngIf="linked2Xero"
|
||||
class="settings-field"
|
||||
[style.width.%]="100">
|
||||
<mat-label>{{ vE.settingsAcodeLbl }}</mat-label>
|
||||
<input matInput
|
||||
width="100%"
|
||||
placeholder="9999999999"
|
||||
formControlName="xAcc"
|
||||
(keyup)="checkStatus($event)">
|
||||
</mat-form-field>
|
||||
|
||||
</div>
|
||||
</mat-dialog-content>
|
||||
</div>
|
||||
<div class="container"
|
||||
style="display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding-left: 20px;
|
||||
padding-right: 20px;">
|
||||
<button mat-raised-button
|
||||
(click)="closeIntegration()">
|
||||
{{ vE.settingsXeroClosebtn }}
|
||||
</button>
|
||||
<button *ngIf="saveAccOk"
|
||||
mat-raised-button
|
||||
color="primary"
|
||||
(click)="saveAccCod()">
|
||||
{{ vE.settingsXeroSavebtn }}
|
||||
</button>
|
||||
</div>
|
||||
<div style="height: 20px;
|
||||
margin-top: 10px;">
|
||||
</div>
|
||||
</mat-tab>
|
||||
<mat-tab label="{{ vE.settingsWCLbl }}">
|
||||
<div >
|
||||
<div *ngIf="wooOwner == ''" align="center">
|
||||
<button mat-raised-button color="primary" (click)="generateWooToken()">
|
||||
{{ vE.settingsWCGentoken }}
|
||||
</button>
|
||||
</div>
|
||||
<table *ngIf="wooOwner != ''">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="heading" style="width: 100%;">{{ vE.settingsWCOwnerlbl }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div>
|
||||
<textarea disabled
|
||||
style="border: none;
|
||||
outline: none;
|
||||
min-height: 150px;
|
||||
width: 94%;"
|
||||
cdkTextareaAutosize
|
||||
cdkAutosizeMinRows="1"
|
||||
cdkAutosizeMaxRows="3">{{wooOwner}}
|
||||
</textarea>
|
||||
</div>
|
||||
</td>
|
||||
<td class="urlCopyBtn">
|
||||
<a (click)='copyWooOwner()' >
|
||||
<fa-icon [icon]="faCopy"
|
||||
class="copy-button">
|
||||
</fa-icon>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="heading" style="width: 60%;">Token:</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div>
|
||||
<textarea disabled
|
||||
style="border: none;
|
||||
outline: none;
|
||||
min-height: 150px;
|
||||
width: 94%;"
|
||||
cdkTextareaAutosize
|
||||
cdkAutosizeMinRows="1"
|
||||
cdkAutosizeMaxRows="3">{{wooToken}}
|
||||
</textarea>
|
||||
</div>
|
||||
</td>
|
||||
<td class="urlCopyBtn">
|
||||
<a (click)='copyWooToken()' >
|
||||
<fa-icon [icon]="faCopy"
|
||||
class="copy-button">
|
||||
</fa-icon>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="heading" style="width: 60%;">URL:</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div>
|
||||
<textarea disabled
|
||||
style="border: none;
|
||||
outline: none;
|
||||
min-height: 150px;
|
||||
width: 94%;"
|
||||
cdkTextareaAutosize
|
||||
cdkAutosizeMinRows="1"
|
||||
cdkAutosizeMaxRows="3">{{wooUrl}}
|
||||
</textarea>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="toolbar" align="center">
|
||||
<button mat-raised-button
|
||||
(click)="close()">
|
||||
{{ vE.settingsWCClosebtn }}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</mat-tab>
|
||||
</mat-tab-group>
|
||||
</mat-tab>
|
||||
</mat-tab-group>
|
||||
</div>
|
||||
|
|
|
@ -1,9 +1,16 @@
|
|||
import { Inject, Component, OnInit, OnDestroy, ViewEncapsulation } from '@angular/core';
|
||||
import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
|
||||
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
|
||||
import { MatSlideToggleChange } from '@angular/material/slide-toggle';
|
||||
import { UntypedFormBuilder, Validators, UntypedFormGroup, FormControl } from '@angular/forms';
|
||||
import { User } from '../user.model';
|
||||
import { Subject, Observable } from 'rxjs';
|
||||
import { Owner } from '../owner.model';
|
||||
import { XeroService } from '../xero.service';
|
||||
import { WoocommerceService } from '../woocommerce.service';
|
||||
|
||||
import { NotifierService } from '../notifier.service';
|
||||
import { faCopy } from '@fortawesome/free-solid-svg-icons';
|
||||
|
||||
import { LanguageService } from '../language.service';
|
||||
|
||||
@Component({
|
||||
selector: 'app-settings',
|
||||
|
@ -13,10 +20,23 @@ import { Owner } from '../owner.model';
|
|||
|
||||
export class SettingsComponent implements OnInit {
|
||||
|
||||
// ------------------------------------
|
||||
//
|
||||
faCopy = faCopy;
|
||||
// ------------------------------------
|
||||
settingsForm: UntypedFormGroup;
|
||||
accCodForm: UntypedFormGroup;
|
||||
owner: Owner;
|
||||
useZats: boolean;
|
||||
useVKey: boolean = false;
|
||||
useTax: boolean;
|
||||
useVat: boolean;
|
||||
useTips: boolean;
|
||||
proVersion: boolean = false;
|
||||
linkMsg: string = '';
|
||||
xeroAccCod: string = '';
|
||||
saveAccOk: boolean = false;
|
||||
private viewkey: string = '';
|
||||
|
||||
coins = [
|
||||
{
|
||||
label: 'US Dollar',
|
||||
|
@ -33,32 +53,186 @@ export class SettingsComponent implements OnInit {
|
|||
},{
|
||||
label: 'Australian Dollar',
|
||||
symbol: 'aud'
|
||||
},{
|
||||
label: 'New Zealand Dollar',
|
||||
symbol: 'nzd'
|
||||
}
|
||||
];
|
||||
xeroLink: string = '';
|
||||
localToken: string = '';
|
||||
clientId: string = '';
|
||||
wooOwner: string = '';
|
||||
wooToken: string = '';
|
||||
wooUrl: string = '';
|
||||
wooOwnerUpdate: Observable<string>;
|
||||
wooTokenUpdate: Observable<string>;
|
||||
wooUrlUpdate: Observable<string>;
|
||||
|
||||
clientIdUpdate: Observable<string>;
|
||||
accCodeUpdate: Observable<string>;
|
||||
linked2Xero : boolean = false;
|
||||
pmtServiceURL : string = '';
|
||||
// -------------------------------------
|
||||
//
|
||||
// Language Support
|
||||
//
|
||||
vE = {
|
||||
settingsAcodeInvalid : '',
|
||||
settingsAcodeLbl : '',
|
||||
settingsAcodeNotsaved : '',
|
||||
settingsAcodeSaved : '',
|
||||
settingsCloseBtn : '',
|
||||
settingsConfirmPayments : '',
|
||||
settingsCopyNotavail : '',
|
||||
settingsCurrencyLbl : '',
|
||||
settingsLink2Xero : '',
|
||||
settingsNameLbl : '',
|
||||
settingsNamePlaceholder : '',
|
||||
settingsNotservClose : '',
|
||||
settingsNotservError : '',
|
||||
settingsNotservSuccess : '',
|
||||
settingsNotservWarning : '',
|
||||
settingsOwneridCopied : '',
|
||||
settingsOwneridNotcopied : '',
|
||||
settingsPmtservURL : '',
|
||||
settingsRelink2Xero : '',
|
||||
settingsSaveBtn : '',
|
||||
settingsTabIntegrations : '',
|
||||
settingsTabMainlbl : '',
|
||||
settingsURLCopied : '',
|
||||
settingsUseSatoshi : '',
|
||||
settingsViewTitle : '',
|
||||
settingsVkeyLbl : '',
|
||||
settingsVkeyPlaceholder : '',
|
||||
settingsWCClosebtn : '',
|
||||
settingsWCGentoken : '',
|
||||
settingsWCLbl : '',
|
||||
settingsWCOwnerlbl : '',
|
||||
settingsWCTokenCopied : '',
|
||||
settingsWCTokenGenerated : '',
|
||||
settingsWCTokenGenfail : '',
|
||||
settingsWCTokenNotcopied : '',
|
||||
settingsXeroClosebtn : '',
|
||||
settingsXeroLbl : '',
|
||||
settingsXeropmtConfirmdis : '',
|
||||
settingsXeroSavebtn : '',
|
||||
settingsUseTips : '',
|
||||
settingsUseTax : '',
|
||||
settingsUseVAT : '',
|
||||
settingsSalesTaxRateLbl : '',
|
||||
settingsSalesTaxRateTxt : '',
|
||||
settingsSalesVATRateLbl : '',
|
||||
settingsSalesVATRateTxt : ''
|
||||
};
|
||||
//
|
||||
languageRdy = new Subject<boolean>();
|
||||
vKaccess = true;
|
||||
|
||||
// ------------------------------------------------------------
|
||||
constructor(
|
||||
private languageService : LanguageService,
|
||||
private notifierService : NotifierService,
|
||||
private fb: UntypedFormBuilder,
|
||||
public xeroService: XeroService,
|
||||
public wooService: WoocommerceService,
|
||||
private dialogRef: MatDialogRef<SettingsComponent>,
|
||||
@Inject(MAT_DIALOG_DATA) public data: Owner) {
|
||||
this.useZats = data.zats;
|
||||
this.useVKey = data.payconf;
|
||||
@Inject(MAT_DIALOG_DATA) public data: {o: Owner}) {
|
||||
this.useZats = data.o.zats;
|
||||
this.useTax = data.o.tax;
|
||||
this.useVat = data.o.vat;
|
||||
this.useTips = data.o.tips;
|
||||
this.settingsForm = fb.group({
|
||||
name: [data.name, Validators.required],
|
||||
currency: [data.currency, Validators.required],
|
||||
useZats: [data.zats, Validators.required],
|
||||
useVKey: [data.payconf, Validators.required],
|
||||
vKey: [data.viewkey]
|
||||
});
|
||||
if (data.payconf) {
|
||||
this.settingsForm.get('vKey')!.enable();
|
||||
name: [data.o.name, Validators.required],
|
||||
currency: [data.o.currency, Validators.required],
|
||||
useZats: [data.o.zats, Validators.required],
|
||||
useVKey: [data.o.payconf, Validators.required],
|
||||
vKey: [data.o.viewkey],
|
||||
useTips: [data.o.tips, Validators.required],
|
||||
useTax: [data.o.tax, Validators.required],
|
||||
taxRate: [data.o.taxValue],
|
||||
useVat: [data.o.vat, Validators.required],
|
||||
vatRate: [data.o.vatValue]
|
||||
});
|
||||
this.accCodForm = fb.group ({
|
||||
xAcc: [this.xeroAccCod]
|
||||
});
|
||||
|
||||
if (data.o.payconf) {
|
||||
this.vKaccess = false;
|
||||
//this.settingsForm.get('vKey')!.enable();
|
||||
}
|
||||
this.owner = data;
|
||||
this.owner = data.o;
|
||||
this.viewkey = data.o.viewkey;
|
||||
this.proVersion = this.owner.invoices;
|
||||
if ( this.owner.crmToken !== '' ) {
|
||||
this.linked2Xero = true;
|
||||
}
|
||||
this.clientIdUpdate = xeroService.clientIdUpdate;
|
||||
xeroService.getXeroConfig();
|
||||
this.clientIdUpdate.subscribe(clientId => {
|
||||
this.clientId = clientId;
|
||||
this.xeroLink = `https://login.xero.com/identity/connect/authorize?response_type=code&client_id=${this.clientId}&redirect_uri=http%3A%2F%2Flocalhost%3A4200%2Fxeroauth&scope=accounting.transactions offline_access&state=${this.owner.address.substring(0, 6)}`
|
||||
});
|
||||
this.accCodeUpdate = xeroService.accCodeUpdate;
|
||||
xeroService.getXeroAccountCode();
|
||||
this.accCodeUpdate.subscribe(accData => {
|
||||
this.xeroAccCod = accData;
|
||||
//console.log("xeroAccCod -> [" + this.xeroAccCod + "]");
|
||||
this.accCodForm.get('xAcc')!.setValue(this.xeroAccCod);
|
||||
});
|
||||
this.wooOwnerUpdate = wooService.ownerUpdate;
|
||||
this.wooTokenUpdate = wooService.tokenUpdate;
|
||||
this.wooUrlUpdate = wooService.siteurlUpdate;
|
||||
wooService.getWooToken(this.owner._id!);
|
||||
this.wooOwnerUpdate.subscribe(owData => {
|
||||
this.wooOwner = owData;
|
||||
});
|
||||
this.wooTokenUpdate.subscribe(tkData => {
|
||||
this.wooToken = tkData;
|
||||
});
|
||||
this.wooUrlUpdate.subscribe(uData => {
|
||||
this.wooUrl = uData;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
ngOnInit() {
|
||||
|
||||
//this.settingsForm.get('vKey')!.disable();
|
||||
//
|
||||
this.vKaccess = true;
|
||||
this.chgUILanguage();
|
||||
//console.log('SETTINGS: Return from chgUILanguage()');
|
||||
//
|
||||
this.languageRdy.subscribe (
|
||||
data => {
|
||||
this.linkMsg = this.vE.settingsLink2Xero;
|
||||
this.pmtServiceURL + '';
|
||||
if ( this.linked2Xero ) {
|
||||
this.linkMsg = this.vE.settingsRelink2Xero; //'Relink to Xero';
|
||||
this.pmtServiceURL =
|
||||
'https://zgo.cash/pmtservice?owner=' +
|
||||
this.owner._id +
|
||||
'&invoiceNo=[INVOICENUMBER]¤cy=[CURRENCY]&amount=[AMOUNTDUE]&shortCode=[SHORTCODE]';
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
safeURL(s: string){
|
||||
return s.replace(/=/g, '').replace(/\+/g, '-').replace(/\//g, '_');
|
||||
}
|
||||
|
||||
close() {
|
||||
|
||||
this.dialogRef.close(null);
|
||||
}
|
||||
|
||||
closeIntegration() {
|
||||
if ( (this.xeroAccCod == '') && (this.linked2Xero) )
|
||||
this.notifierService
|
||||
.showNotification(this.vE.settingsXeropmtConfirmdis ,
|
||||
this.vE.settingsNotservClose,'warning',
|
||||
this.vE.settingsNotservWarning);
|
||||
this.dialogRef.close();
|
||||
}
|
||||
|
||||
|
@ -67,9 +241,13 @@ export class SettingsComponent implements OnInit {
|
|||
this.owner.currency = this.settingsForm.value.currency;
|
||||
this.owner.zats = this.settingsForm.value.useZats;
|
||||
this.owner.payconf = this.settingsForm.value.useVKey;
|
||||
|
||||
this.owner.viewkey = this.settingsForm.value.vKey;
|
||||
|
||||
this.owner.tax = this.settingsForm.value.useTax;
|
||||
this.owner.taxValue = this.settingsForm.value.taxRate;
|
||||
this.owner.vat = this.settingsForm.value.useVat;
|
||||
this.owner.vatValue = this.settingsForm.value.vatRate;
|
||||
this.owner.tips = this.settingsForm.value.useTips;
|
||||
//console.log('Settings component key: ' + this.owner.viewkey);
|
||||
this.dialogRef.close(this.owner);
|
||||
}
|
||||
|
||||
|
@ -77,16 +255,225 @@ export class SettingsComponent implements OnInit {
|
|||
this.useZats = ob.checked;
|
||||
}
|
||||
|
||||
onChangeVKeyOn(ob: MatSlideToggleChange) {
|
||||
// console.log("Viewing key switch is " +
|
||||
// ( ob.checked ? "[ON]." : "[OFF]." ) );
|
||||
|
||||
this.useVKey = ob.checked;
|
||||
onChangeTax(ob: MatSlideToggleChange) {
|
||||
this.useTax = ob.checked;
|
||||
}
|
||||
|
||||
onChangeVat(ob: MatSlideToggleChange) {
|
||||
this.useVat = ob.checked;
|
||||
}
|
||||
|
||||
if ( ob.checked )
|
||||
this.settingsForm.get('vKey')!.enable();
|
||||
else
|
||||
this.settingsForm.get('vKey')!.disable();
|
||||
onChangeTips(ob: MatSlideToggleChange) {
|
||||
this.useTips = ob.checked;
|
||||
}
|
||||
|
||||
onChangeVKeyOn(ob: MatSlideToggleChange) {
|
||||
// console.log("Viewing key switch is " +
|
||||
// ( ob.checked ? "[ON]." : "[OFF]." ) );
|
||||
|
||||
if ( ob.checked ) {
|
||||
//this.settingsForm.get('vKey')!.enable();
|
||||
this.vKaccess = false;
|
||||
} else {
|
||||
//this.settingsForm.get('vKey')!.disable();
|
||||
this.vKaccess = true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
copyUrl() {
|
||||
// console.log("Inside copyUrl()");
|
||||
if (navigator.clipboard) {
|
||||
};
|
||||
try {
|
||||
navigator.clipboard.writeText(this.pmtServiceURL);
|
||||
this.notifierService
|
||||
.showNotification(this.vE.settingsURLCopied,
|
||||
this.vE.settingsNotservClose,
|
||||
'success',
|
||||
this.vE.settingsNotservSuccess);
|
||||
|
||||
} catch (err) {
|
||||
// console.error("Error", err);
|
||||
this.notifierService
|
||||
.showNotification(this.vE.settingsCopyNotavail,
|
||||
this.vE.settingsNotservClose,
|
||||
'error',
|
||||
this.vE.settingsNotservError);
|
||||
}
|
||||
}
|
||||
|
||||
copyWooOwner(){
|
||||
try {
|
||||
navigator.clipboard.writeText(this.wooOwner);
|
||||
this.notifierService.showNotification(this.vE.settingsOwneridCopied,
|
||||
this.vE.settingsNotservClose,
|
||||
"success",
|
||||
this.vE.settingsNotservSuccess);
|
||||
} catch (err) {
|
||||
this.notifierService.showNotification(this.vE.settingsOwneridNotcopied,
|
||||
this.vE.settingsNotservClose,
|
||||
"error",
|
||||
this.vE.settingsNotservError);
|
||||
}
|
||||
}
|
||||
|
||||
copyWooToken(){
|
||||
try {
|
||||
navigator.clipboard.writeText(this.wooToken);
|
||||
this.notifierService.showNotification(this.vE.settingsWCTokenCopied,
|
||||
this.vE.settingsNotservClose,
|
||||
"success",
|
||||
this.vE.settingsNotservSuccess);
|
||||
} catch (err) {
|
||||
this.notifierService.showNotification(this.vE.settingsWCTokenNotcopied,
|
||||
this.vE.settingsNotservClose,
|
||||
"error",
|
||||
this.vE.settingsNotservError);
|
||||
}
|
||||
}
|
||||
|
||||
generateWooToken(){
|
||||
this.wooService.createWooToken(this.owner._id!).subscribe(responseData => {
|
||||
if (responseData.status == 202) {
|
||||
this.notifierService.showNotification(
|
||||
this.vE.settingsWCTokenGenerated,
|
||||
this.vE.settingsNotservClose,
|
||||
"success",
|
||||
this.vE.settingsNotservSuccess);
|
||||
this.wooService.getWooToken(this.owner._id!);
|
||||
this.wooOwnerUpdate.subscribe(owData => {
|
||||
this.wooOwner = owData;
|
||||
});
|
||||
this.wooTokenUpdate.subscribe(tkData => {
|
||||
this.wooToken = tkData;
|
||||
});
|
||||
this.wooUrlUpdate.subscribe(uData => {
|
||||
this.wooUrl = uData;
|
||||
});
|
||||
close();
|
||||
} else {
|
||||
this.notifierService.showNotification(
|
||||
this.vE.settingsWCTokenGenfail,
|
||||
this.vE.settingsNotservClose,
|
||||
"error",
|
||||
this.vE.settingsNotservError);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
saveAccCod() {
|
||||
|
||||
this.xeroAccCod = this.accCodForm.value.xAcc;
|
||||
//console.log(">>> " + this.xeroAccCod);
|
||||
if ( this.xeroAccCod.length <= 10 ) {
|
||||
const obs = this.xeroService
|
||||
.setXeroAccountCode(this.owner.address,
|
||||
this.xeroAccCod);
|
||||
obs.subscribe({ next: responseData => {
|
||||
if (responseData.status == 202) {
|
||||
//console.log('Account saved');
|
||||
this.notifierService
|
||||
.showNotification(this.vE.settingsAcodeSaved,
|
||||
this.vE.settingsNotservClose,
|
||||
"success",
|
||||
this.vE.settingsNotservSuccess);
|
||||
} else {
|
||||
//console.log('Account not saved -> status[' + responseData.status + ']');
|
||||
this.notifierService
|
||||
.showNotification(
|
||||
this.vE.settingsAcodeNotsaved,
|
||||
this.vE.settingsNotservClose,
|
||||
"error",
|
||||
this.vE.settingsNotservError);
|
||||
}
|
||||
|
||||
},
|
||||
error: error => {
|
||||
//console.log('Error saving Account Code -> ' + error.msg)
|
||||
}});
|
||||
|
||||
} else {
|
||||
this.notifierService
|
||||
.showNotification(
|
||||
this.vE.settingsAcodeInvalid,
|
||||
this.vE.settingsNotservClose,
|
||||
"error",
|
||||
this.vE.settingsNotservError);
|
||||
};
|
||||
}
|
||||
/*
|
||||
xeroAccCodChanged( arg: any ) {
|
||||
console.log("Account Code changed: " + arg.target.value);
|
||||
// console.log(arg);
|
||||
this.saveAccOk = (arg.target.value != this.xeroAccCod );
|
||||
}
|
||||
*/
|
||||
checkStatus( arg : any ) {
|
||||
//console.log('onChange - checkStatus');
|
||||
//console.log(arg.target.value);
|
||||
this.saveAccOk = (arg.target.value != this.xeroAccCod );
|
||||
}
|
||||
|
||||
chgUILanguage(){
|
||||
//console.log('SETTINGS.chgUILanguage Called ');
|
||||
this.languageService.getViewElements('settings').subscribe({
|
||||
next: response => {
|
||||
//console.log('Received >> ', response );
|
||||
//console.log('Language Code : ', response.language);
|
||||
//console.log('Component Name : ',response.component);
|
||||
//console.log('Language data : ',response.data);
|
||||
|
||||
this.vE.settingsViewTitle = response.data.settings_view_title;
|
||||
this.vE.settingsTabMainlbl = response.data.settings_tab_mainlbl;
|
||||
this.vE.settingsNameLbl = response.data.settings_name_lbl;
|
||||
this.vE.settingsCurrencyLbl = response.data.settings_currency_lbl;
|
||||
this.vE.settingsNamePlaceholder = response.data.settings_name_placeholder;
|
||||
this.vE.settingsUseSatoshi = response.data.settings_use_satoshi;
|
||||
this.vE.settingsVkeyLbl = response.data.settings_vkey_lbl;
|
||||
this.vE.settingsVkeyPlaceholder = response.data.settings_vkey_placeholder;
|
||||
this.vE.settingsConfirmPayments = response.data.settings_confirm_payments;
|
||||
this.vE.settingsCloseBtn = response.data.settings_close_btn;
|
||||
this.vE.settingsSaveBtn = response.data.settings_save_btn;
|
||||
this.vE.settingsTabIntegrations = response.data.settings_tab_integrations;
|
||||
this.vE.settingsXeroLbl = response.data.settings_xero_lbl;
|
||||
this.vE.settingsLink2Xero = response.data.settings_link_2xero;
|
||||
this.vE.settingsRelink2Xero = response.data.settings_relink_2xero;
|
||||
this.vE.settingsXeropmtConfirmdis = response.data.settings_xeropmt_confirmdis;
|
||||
this.vE.settingsNotservClose = response.data.settings_notserv_close;
|
||||
this.vE.settingsNotservWarning = response.data.settings_notserv_warning;
|
||||
this.vE.settingsPmtservURL = response.data.settings_pmtserv_url;
|
||||
this.vE.settingsAcodeLbl = response.data.settings_acode_lbl;
|
||||
this.vE.settingsXeroClosebtn = response.data.settings_xero_closebtn;
|
||||
this.vE.settingsXeroSavebtn = response.data.settings_xero_savebtn;
|
||||
this.vE.settingsWCLbl = response.data.settings_wc_lbl;
|
||||
this.vE.settingsWCGentoken = response.data.settings_wc_gentoken;
|
||||
this.vE.settingsWCOwnerlbl = response.data.settings_wc_ownerlbl;
|
||||
this.vE.settingsWCClosebtn = response.data.settings_wc_closebtn;
|
||||
this.vE.settingsURLCopied = response.data.settings_url_copied;
|
||||
this.vE.settingsNotservSuccess = response.data.settings_notserv_success;
|
||||
this.vE.settingsNotservError = response.data.settings_notserv_error;
|
||||
this.vE.settingsCopyNotavail = response.data.settings_copy_notavail;
|
||||
this.vE.settingsOwneridCopied = response.data.settings_ownerid_copied;
|
||||
this.vE.settingsOwneridNotcopied = response.data.settings_ownerid_notcopied;
|
||||
this.vE.settingsWCTokenCopied = response.data.settings_wctoken_copied;
|
||||
this.vE.settingsWCTokenNotcopied = response.data.settings_wctoken_notcopied;
|
||||
this.vE.settingsWCTokenGenerated = response.data.settings_wctoken_generated;
|
||||
this.vE.settingsWCTokenGenfail = response.data.settings_wctoken_genfail;
|
||||
this.vE.settingsAcodeSaved = response.data.settings_acode_saved;
|
||||
this.vE.settingsAcodeNotsaved = response.data.settings_acode_notsaved;
|
||||
this.vE.settingsAcodeInvalid = response.data.settings_acode_invalid;
|
||||
this.vE.settingsUseTips = response.data.settings_use_tips;
|
||||
this.vE.settingsUseTax = response.data.settings_use_tax;
|
||||
this.vE.settingsUseVAT = response.data.settings_use_vat;
|
||||
this.vE.settingsSalesTaxRateLbl = response.data.settings_sales_tax_rate_lbl;
|
||||
this.vE.settingsSalesTaxRateTxt = response.data.settings_sales_tax_rate_txt;
|
||||
this.vE.settingsSalesVATRateLbl = response.data.settings_sales_vat_rate_lbl;
|
||||
this.vE.settingsSalesVATRateTxt = response.data.settings_sales_vat_rate_txt;
|
||||
//
|
||||
this.languageRdy.next(true);
|
||||
},
|
||||
error: error => { console.log('Error >> ',error); }
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
20
src/app/tips/tips.component.css
Normal file
20
src/app/tips/tips.component.css
Normal 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;
|
||||
}
|
40
src/app/tips/tips.component.html
Normal file
40
src/app/tips/tips.component.html
Normal file
|
@ -0,0 +1,40 @@
|
|||
<mat-card>
|
||||
<mat-card-title class="scan-header">
|
||||
{{ vE.tipsEnterTip }}
|
||||
</mat-card-title>
|
||||
<mat-card-content>
|
||||
<br>
|
||||
<div align="center" class="card-contents">
|
||||
<table cellspacing="0">
|
||||
<tr>
|
||||
<th align="center"> {{ vE.tipsSubtotal }}</th>
|
||||
<th align="center"></th>
|
||||
<th align="center">{{ vE.tipsTip }}</th>
|
||||
<th align="center"></th>
|
||||
<th align="center">{{ vE.tipsTotal }}</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>{{ vE.tipsNoTipBtn }}
|
||||
</button>
|
||||
<button mat-raised-button color="primary" (click)="confirm()">
|
||||
<mat-icon class="icon">done</mat-icon>{{ vE.tipsDoneBtn }}
|
||||
</button>
|
||||
</mat-card-actions>
|
||||
</mat-card>
|
21
src/app/tips/tips.component.spec.ts
Normal file
21
src/app/tips/tips.component.spec.ts
Normal 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();
|
||||
});
|
||||
});
|
81
src/app/tips/tips.component.ts
Normal file
81
src/app/tips/tips.component.ts
Normal file
|
@ -0,0 +1,81 @@
|
|||
import { Inject, Component, OnInit } from '@angular/core';
|
||||
import { MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog';
|
||||
|
||||
import { LanguageService } from '../language.service';
|
||||
import { LanguageData } from '../language.model';
|
||||
|
||||
@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;
|
||||
|
||||
// -------------------------------------
|
||||
//
|
||||
// Language Support
|
||||
//
|
||||
vE = {
|
||||
tipsEnterTip : '',
|
||||
tipsSubtotal : '',
|
||||
tipsTip : '',
|
||||
tipsTotal : '',
|
||||
tipsNoTipBtn : '',
|
||||
tipsDoneBtn : ''
|
||||
}
|
||||
|
||||
constructor(
|
||||
private languageService : LanguageService,
|
||||
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);
|
||||
}
|
||||
this.chgUILanguage();
|
||||
}
|
||||
|
||||
formatPercent(v: number) {
|
||||
return (v * 100) + '%';
|
||||
}
|
||||
|
||||
close() {
|
||||
this.dialogRef.close(0);
|
||||
}
|
||||
|
||||
confirm() {
|
||||
this.dialogRef.close(this.orderTotal * this.value);
|
||||
}
|
||||
|
||||
chgUILanguage(){
|
||||
console.log('TIPS.chgUILanguage Called ');
|
||||
this.languageService.getViewElements('tips').subscribe(
|
||||
response => {
|
||||
console.log('Received >> ', response );
|
||||
console.log('Language Code : ', response.language);
|
||||
console.log('Component Name : ',response.component);
|
||||
console.log('Language data : ',response.data);
|
||||
|
||||
this.vE.tipsEnterTip = response.data.tips_enter_tip;
|
||||
this.vE.tipsSubtotal = response.data.tips_subtotal;
|
||||
this.vE.tipsTip = response.data.tips_tip;
|
||||
this.vE.tipsTotal = response.data.tips_total;
|
||||
this.vE.tipsNoTipBtn = response.data.tips_notip_btn;
|
||||
this.vE.tipsDoneBtn = response.data.tips_done_btn;
|
||||
},
|
||||
error => { console.log('Error >> ',error); }
|
||||
);
|
||||
}
|
||||
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
import { Injectable } from '@angular/core';
|
||||
import { Subject, BehaviorSubject, Observable } from 'rxjs';
|
||||
import { BehaviorSubject, Observable } from 'rxjs';
|
||||
|
||||
import { HttpClient, HttpParams, HttpHeaders } from '@angular/common/http';
|
||||
|
||||
|
@ -8,7 +8,6 @@ import { NotifierService } from './notifier.service';
|
|||
import { User } from './user.model';
|
||||
import { Owner } from './owner.model';
|
||||
import { Country } from './country.model';
|
||||
import { Tx } from './tx.model';
|
||||
|
||||
import { ConfigData } from './configdata';
|
||||
|
||||
|
@ -18,7 +17,7 @@ var Buffer = require('buffer/').Buffer;
|
|||
|
||||
export class UserService{
|
||||
beUrl = ConfigData.Be_URL;
|
||||
private dataStore: { user: User, owner: Owner, txs: Tx[], countries: Country[]} = {
|
||||
private dataStore: { user: User, owner: Owner, countries: Country[]} = {
|
||||
user: {
|
||||
address: '',
|
||||
session: '',
|
||||
|
@ -34,44 +33,31 @@ export class UserService{
|
|||
taxValue: 0,
|
||||
vat: false,
|
||||
vatValue: 0,
|
||||
first: '',
|
||||
last: '',
|
||||
email: '',
|
||||
street: '',
|
||||
city: '',
|
||||
state: '',
|
||||
postal: '',
|
||||
phone: '',
|
||||
paid: false,
|
||||
website: '',
|
||||
country: '',
|
||||
zats: false,
|
||||
invoices: false,
|
||||
expiration: new Date(Date.now()).toISOString(),
|
||||
payconf: false,
|
||||
viewkey: ''
|
||||
crmToken: '',
|
||||
viewkey: '',
|
||||
tips: false
|
||||
},
|
||||
txs : [],
|
||||
countries: []
|
||||
};
|
||||
private uZaddr = '';
|
||||
private oZaddr = '';
|
||||
private uName = '';
|
||||
private session: string | null = '';
|
||||
private _uZaddrUpdated: BehaviorSubject<string> = new BehaviorSubject(this.uZaddr);
|
||||
private _userUpdated: BehaviorSubject<User> = new BehaviorSubject(this.dataStore.user);
|
||||
private uNameUpdated = new Subject<string>();
|
||||
private _ownerUpdated: BehaviorSubject<Owner> = new BehaviorSubject(this.dataStore.owner);
|
||||
private _txsUpdated: BehaviorSubject<Tx[]> = new BehaviorSubject(this.dataStore.txs);
|
||||
private _paidUpdated: BehaviorSubject<boolean> = new BehaviorSubject(this.dataStore.owner.paid);
|
||||
private _countriesUpdated: BehaviorSubject<Country[]> = new BehaviorSubject(this.dataStore.countries);
|
||||
public readonly uZaddrUpdate: Observable<string> = this._uZaddrUpdated.asObservable();
|
||||
public readonly ownerUpdate: Observable<Owner> = this._ownerUpdated.asObservable();
|
||||
public readonly userUpdate: Observable<User> = this._userUpdated.asObservable();
|
||||
public readonly txUpdate: Observable<Tx[]> = this._txsUpdated.asObservable();
|
||||
public readonly paidUpdate: Observable<boolean> = this._paidUpdated.asObservable();
|
||||
public readonly countriesUpdate: Observable<Country[]> = this._countriesUpdated.asObservable();
|
||||
private reqHeaders: HttpHeaders;
|
||||
private reqParams: HttpParams;
|
||||
|
||||
constructor(private http: HttpClient,
|
||||
private notifierService : NotifierService ){
|
||||
|
@ -79,13 +65,14 @@ export class UserService{
|
|||
this.reqHeaders = new HttpHeaders().set('Authorization', auth);
|
||||
//console.log('US:', this.reqHeaders);
|
||||
this.session = localStorage.getItem('s4z_token');
|
||||
if (this.session != null) {
|
||||
this.findUser();
|
||||
}
|
||||
this.reqParams = new HttpParams().append('session', this.session!);
|
||||
//if (this.session != null) {
|
||||
//this.findUser();
|
||||
//}
|
||||
}
|
||||
|
||||
getCountries() {
|
||||
let obs = this.http.get<{message: string, countries: any}>(this.beUrl+'api/countries', { headers: this.reqHeaders, observe: 'response'});
|
||||
let obs = this.http.get<{message: string, countries: any}>(this.beUrl+'api/countries', { headers: this.reqHeaders, params: this.reqParams, observe: 'response'});
|
||||
|
||||
obs.subscribe((CountryResponse) => {
|
||||
if (CountryResponse.status == 200) {
|
||||
|
@ -95,20 +82,29 @@ export class UserService{
|
|||
});
|
||||
}
|
||||
|
||||
findUser() {
|
||||
this.session = localStorage.getItem('s4z_token');
|
||||
checkUser() {
|
||||
if (this.session != null) {
|
||||
const params = new HttpParams().append('session', this.session!);
|
||||
let obs = this.http.get<{message: string, user: any}>(this.beUrl+'api/user', { headers: this.reqHeaders, params: params, observe: 'response'});
|
||||
console.log('calling checkUser');
|
||||
let obs = this.http.get<{validated: boolean}>(this.beUrl + 'checkuser', {headers: this.reqHeaders, params: this.reqParams, observe: 'response'});
|
||||
|
||||
return obs;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
findUser() {
|
||||
if (this.session != null) {
|
||||
let obs = this.http.get<{message: string, user: any}>(this.beUrl+'api/user', { headers: this.reqHeaders, params: this.reqParams, observe: 'response'});
|
||||
|
||||
obs.subscribe((UserDataResponse) => {
|
||||
console.log(UserDataResponse.status);
|
||||
//console.log(UserDataResponse.status);
|
||||
if (UserDataResponse.status == 200){
|
||||
this.dataStore.user = UserDataResponse.body!.user;
|
||||
console.log(`US: Found user, returning it`);
|
||||
//console.log(`US: Found user, returning it`);
|
||||
this._uZaddrUpdated.next(Object.assign({},this.dataStore).user.address);
|
||||
this._userUpdated.next(Object.assign({}, this.dataStore).user);
|
||||
this.getOwner(Object.assign({},this.dataStore.user).address);
|
||||
this.getOwner();
|
||||
} else {
|
||||
this.dataStore.user = {
|
||||
address: '',
|
||||
|
@ -119,7 +115,7 @@ export class UserService{
|
|||
};
|
||||
this._uZaddrUpdated.next(Object.assign({},this.dataStore).user.address);
|
||||
this._userUpdated.next(Object.assign({}, this.dataStore).user);
|
||||
console.log('US: Did not find user');
|
||||
//console.log('US: Did not find user');
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -131,8 +127,8 @@ export class UserService{
|
|||
}
|
||||
|
||||
validateUser(pinString:string){
|
||||
const params = new HttpParams().append('session', this.dataStore.user.session).append('pin', pinString);
|
||||
let obs = this.http.post(this.beUrl+'api/validateuser', {}, {headers: this.reqHeaders, params: params, observe: 'response'});
|
||||
const params = this.reqParams.append('pin', pinString);
|
||||
let obs = this.http.post(this.beUrl+'validateuser', {}, {headers: this.reqHeaders, params: params, observe: 'response'});
|
||||
obs.subscribe((responseData) => {
|
||||
if (responseData.status == 202) {
|
||||
console.log('Pin validated!');
|
||||
|
@ -146,29 +142,81 @@ export class UserService{
|
|||
return obs;
|
||||
}
|
||||
|
||||
addOwner(owner: Owner) {
|
||||
addOwner(oData: {first: string, last: string, phone: string, name: string, street: string, city: string, state: string, postal: string, country: string, email: string, website: string}) {
|
||||
|
||||
owner.address = this.dataStore.user.address;
|
||||
let obs = this.http.post(this.beUrl+'api/owner', {payload: owner}, {headers: this.reqHeaders});
|
||||
let obs = this.http.post(this.beUrl+'api/owner', {payload: oData}, {headers: this.reqHeaders, params: this.reqParams});
|
||||
|
||||
obs.subscribe((responseData) => {
|
||||
//console.log("Entra a console log");
|
||||
this.getOwner(this.dataStore.user.address);
|
||||
}, (error) => {
|
||||
//console.log("Status is : [" + error.status + "]");
|
||||
if ( error.status = 500 ) {
|
||||
this.notifierService
|
||||
.showNotification("Invalid Viewing Key, changes not saved!!","Close",'error');
|
||||
};
|
||||
obs.subscribe({
|
||||
next: () => {
|
||||
//console.log("Entra a console log");
|
||||
this.getOwner();
|
||||
},
|
||||
error: (error) => {
|
||||
//console.log("Status is : [" + error.status + "]");
|
||||
if ( error.status = 500 ) {
|
||||
this.notifierService.showNotification("Invalid Viewing Key, changes not saved!!","Close",'error');
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
return obs;
|
||||
}
|
||||
|
||||
getOwner(address: string) {
|
||||
console.log('getOwner', address);
|
||||
const ownParams = new HttpParams().append('address', address);
|
||||
let obs = this.http.get<{message:string, owner: any}>(this.beUrl+'api/owner', { headers: this.reqHeaders, params: ownParams, observe: 'response'});
|
||||
saveOwnerSettings(o: Owner) {
|
||||
//console.log('saveOwnerSettings: ' + o.viewkey);
|
||||
if(o.viewkey.length > 20) {
|
||||
this.saveOwnerViewingKey(o.viewkey).subscribe({
|
||||
next: () => {
|
||||
let obs = this.http.post(this.beUrl + 'api/ownersettings', {payload: o}, {headers: this.reqHeaders, params: this.reqParams});
|
||||
obs.subscribe({
|
||||
next: () => {
|
||||
this.getOwner();
|
||||
},
|
||||
error: (error) => {
|
||||
if ( error.status == 500 ){
|
||||
this.notifierService.showNotification("Saving settings failed", "Close", "error")
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
} else {
|
||||
let obs = this.http.post(this.beUrl + 'api/ownersettings', {payload: o}, {headers: this.reqHeaders, params: this.reqParams});
|
||||
obs.subscribe({
|
||||
next: () => {
|
||||
this.getOwner();
|
||||
},
|
||||
error: (error) => {
|
||||
if ( error.status == 500 ){
|
||||
this.notifierService.showNotification("Saving settings failed", "Close", "error")
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
saveOwnerViewingKey(vk: string){
|
||||
let obs = this.http.post(this.beUrl + 'api/ownervk', {payload: vk}, {headers: this.reqHeaders, params: this.reqParams});
|
||||
obs.subscribe({
|
||||
next: () => {
|
||||
this.getOwner();
|
||||
},
|
||||
error: (error) => {
|
||||
if (error.status == 400) {
|
||||
this.notifierService.showNotification('Invalid viewing key, changes not saved', 'Close', 'error');
|
||||
} else if (error.status == 403) {
|
||||
this.notifierService.showNotification('Viewing key does not match shop, changes not saved', 'Close', 'error');
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return obs;
|
||||
}
|
||||
|
||||
getOwner() {
|
||||
//console.log('getOwner', address);
|
||||
//const ownParams = this.reqParams.append('address', address)
|
||||
let obs = this.http.get<{message:string, owner: any}>(this.beUrl+'api/owner', { headers: this.reqHeaders, params: this.reqParams, observe: 'response'});
|
||||
|
||||
obs.subscribe((OwnerDataResponse) => {
|
||||
//console.log('api/getowner', OwnerDataResponse.status);
|
||||
|
@ -186,14 +234,21 @@ export class UserService{
|
|||
}
|
||||
|
||||
deleteUser() {
|
||||
let obs = this.http.delete<{message: string}>(this.beUrl+'api/user/'+this.dataStore.user._id, {headers: this.reqHeaders });
|
||||
let obs = this.http.delete<{message: string}>(this.beUrl+'api/user/'+this.dataStore.user._id, {headers: this.reqHeaders, params: this.reqParams });
|
||||
|
||||
obs.subscribe(UserResponse => {
|
||||
obs.subscribe({next: () => {
|
||||
//console.log('User delete request sent.');
|
||||
this.findUser();
|
||||
});
|
||||
}});
|
||||
|
||||
return obs;
|
||||
}
|
||||
|
||||
saveSettings(o: Owner) {
|
||||
}
|
||||
|
||||
currentOwner() : Owner {
|
||||
return this.dataStore.owner;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
3
src/app/viewelement.model.ts
Normal file
3
src/app/viewelement.model.ts
Normal file
|
@ -0,0 +1,3 @@
|
|||
export interface viewElement {
|
||||
text: string;
|
||||
}
|
|
@ -12,13 +12,13 @@
|
|||
<div class="main-buttons">
|
||||
<button mat-raised-button color="primary"
|
||||
[routerLink]="['/orders']">
|
||||
View Orders
|
||||
{{ vE.viewerViewOrders }}
|
||||
</button>
|
||||
<button mat-raised-button color="primary"
|
||||
class="text" (click)="openSettings()">
|
||||
<button mat-icon-button color="primary"
|
||||
(click)="openSettings()">
|
||||
<mat-icon class="icon">manage_accounts</mat-icon>
|
||||
</button>
|
||||
<a mat-raised-button color="primary"
|
||||
<a mat-icon-button color="primary"
|
||||
href="https://zgo.cash/"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer">
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
import { Component, OnInit, OnDestroy } from '@angular/core';
|
||||
import { CanActivate, Router, RouterStateSnapshot, ActivatedRouteSnapshot } from '@angular/router';
|
||||
import { Component, OnInit } from '@angular/core';
|
||||
import { Router } from '@angular/router';
|
||||
import { MatDialog, MatDialogConfig } from '@angular/material/dialog';
|
||||
import { UserService } from '../user.service';
|
||||
import { FullnodeService } from '../fullnode.service';
|
||||
import { ItemService } from '../items/items.service';
|
||||
import { Subscription, Observable } from 'rxjs';
|
||||
import { Observable } from 'rxjs';
|
||||
import { SettingsComponent } from '../settings/settings.component';
|
||||
|
||||
import {Owner} from '../owner.model';
|
||||
import {User} from '../user.model';
|
||||
|
||||
import { LanguageService } from '../language.service';
|
||||
|
||||
@Component({
|
||||
selector: 'app-viewer',
|
||||
|
@ -36,22 +36,14 @@ export class ViewerComponent implements OnInit {
|
|||
taxValue: 0,
|
||||
vat: false,
|
||||
vatValue: 0,
|
||||
first: '',
|
||||
last: '',
|
||||
email: '',
|
||||
street: '',
|
||||
city: '',
|
||||
state: '',
|
||||
postal: '',
|
||||
phone: '',
|
||||
paid: false,
|
||||
website: '',
|
||||
country: '',
|
||||
zats: false,
|
||||
invoices: false,
|
||||
expiration: new Date(Date.now()).toISOString(),
|
||||
payconf: false,
|
||||
viewkey: ''
|
||||
crmToken: '',
|
||||
viewkey: '',
|
||||
tips: false
|
||||
};
|
||||
public price: number = 1;
|
||||
public addrUpdate: Observable<string>;
|
||||
|
@ -59,12 +51,20 @@ export class ViewerComponent implements OnInit {
|
|||
public userUpdate: Observable<User>;
|
||||
public priceUpdate: Observable<number>;
|
||||
orientation: boolean = false;
|
||||
|
||||
//
|
||||
// Language Support
|
||||
//
|
||||
vE = {
|
||||
viewerViewOrders : ''
|
||||
}
|
||||
//
|
||||
// ------------------------------------------------------------
|
||||
constructor(
|
||||
public fullnodeService: FullnodeService,
|
||||
private router: Router,
|
||||
public userService: UserService,
|
||||
private dialog: MatDialog
|
||||
private dialog: MatDialog,
|
||||
private languageService: LanguageService
|
||||
){
|
||||
this.addrUpdate = fullnodeService.addrUpdate;
|
||||
this.ownerUpdate = userService.ownerUpdate;
|
||||
|
@ -72,6 +72,9 @@ export class ViewerComponent implements OnInit {
|
|||
this.ownerUpdate.subscribe((owner) => {
|
||||
this.owner = owner;
|
||||
});
|
||||
|
||||
// console.log(this.owner._id);
|
||||
|
||||
this.userUpdate = userService.userUpdate;
|
||||
this.userUpdate.subscribe((user) => {
|
||||
this.user = user;
|
||||
|
@ -82,6 +85,7 @@ export class ViewerComponent implements OnInit {
|
|||
}
|
||||
|
||||
ngOnInit(){
|
||||
this.chgUILanguage();
|
||||
this.orientation = (window.innerWidth <= 500);
|
||||
this.ownerUpdate.subscribe((owner) => {
|
||||
this.message = owner.name;
|
||||
|
@ -112,13 +116,13 @@ export class ViewerComponent implements OnInit {
|
|||
|
||||
dialogConfig.disableClose = true;
|
||||
dialogConfig.autoFocus = true;
|
||||
dialogConfig.data = this.owner;
|
||||
dialogConfig.data = {o: this.owner};
|
||||
|
||||
const dialogRef = this.dialog.open(SettingsComponent, dialogConfig);
|
||||
dialogRef.afterClosed().subscribe((val) => {
|
||||
if (val != null) {
|
||||
//console.log('Saving settings', val);
|
||||
this.userService.addOwner(val);
|
||||
this.userService.saveOwnerSettings(val);
|
||||
this.fullnodeService.getPrice(val.currency);
|
||||
this.loginCheck();
|
||||
}
|
||||
|
@ -133,10 +137,26 @@ export class ViewerComponent implements OnInit {
|
|||
this.user = user;
|
||||
//console.log('Viewer loginCheck', this.user);
|
||||
if (!this.owner.paid || !this.user.validated) {
|
||||
console.log('Log in expired!');
|
||||
// console.log('Log in expired!');
|
||||
this.router.navigate(['/login']);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
chgUILanguage(){
|
||||
//console.log('VIEWER.chgUILanguage Called ');
|
||||
this.languageService.getViewElements('viewer').subscribe({
|
||||
next: response => {
|
||||
//console.log('Received >> ', response );
|
||||
//console.log('Language Code : ', response.language);
|
||||
//console.log('Component Name : ',response.component);
|
||||
//console.log('Language data : ',response.data);
|
||||
|
||||
this.vE.viewerViewOrders = response.data.viewer_view_orders;
|
||||
},
|
||||
error: error => { console.log('Error >> ',error); }
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
|
16
src/app/woocommerce.service.spec.ts
Normal file
16
src/app/woocommerce.service.spec.ts
Normal file
|
@ -0,0 +1,16 @@
|
|||
import { TestBed } from '@angular/core/testing';
|
||||
|
||||
import { WoocommerceService } from './woocommerce.service';
|
||||
|
||||
describe('WoocommerceService', () => {
|
||||
let service: WoocommerceService;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({});
|
||||
service = TestBed.inject(WoocommerceService);
|
||||
});
|
||||
|
||||
it('should be created', () => {
|
||||
expect(service).toBeTruthy();
|
||||
});
|
||||
});
|
69
src/app/woocommerce.service.ts
Normal file
69
src/app/woocommerce.service.ts
Normal file
|
@ -0,0 +1,69 @@
|
|||
import { Injectable } from '@angular/core';
|
||||
import { BehaviorSubject, Observable } from 'rxjs';
|
||||
import { HttpClient, HttpParams, HttpHeaders } from '@angular/common/http';
|
||||
|
||||
import { ConfigData } from './configdata';
|
||||
|
||||
var Buffer = require('buffer/').Buffer;
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root'
|
||||
})
|
||||
export class WoocommerceService {
|
||||
beUrl = ConfigData.Be_URL;
|
||||
private reqHeaders: HttpHeaders;
|
||||
private reqParams: HttpParams;
|
||||
private ownerId: string = '';
|
||||
private token: string = '';
|
||||
private siteurl: string = '';
|
||||
private session: null | string;
|
||||
private _ownerIdUpdated: BehaviorSubject<string> = new BehaviorSubject(this.ownerId);
|
||||
private _tokenUpdated: BehaviorSubject<string> = new BehaviorSubject(this.token);
|
||||
private _siteurlUpdated: BehaviorSubject<string> = new BehaviorSubject(this.siteurl);
|
||||
public readonly ownerUpdate: Observable<string> = this._ownerIdUpdated.asObservable();
|
||||
public readonly tokenUpdate: Observable<string> = this._tokenUpdated.asObservable();
|
||||
public readonly siteurlUpdate: Observable<string> = this._siteurlUpdated.asObservable();
|
||||
|
||||
constructor(
|
||||
private http: HttpClient
|
||||
) {
|
||||
var auth = 'Basic ' + Buffer.from(ConfigData.UsrPwd).toString('base64');
|
||||
this.reqHeaders = new HttpHeaders().set('Authorization', auth);
|
||||
this.session = localStorage.getItem('s4z_token');
|
||||
this.reqParams = new HttpParams().append('session', this.session!);
|
||||
this._ownerIdUpdated.next(Object.assign({}, this).ownerId);
|
||||
this._tokenUpdated.next(Object.assign({}, this).token);
|
||||
this._siteurlUpdated.next(Object.assign({}, this).siteurl);
|
||||
}
|
||||
|
||||
getWooToken(ownerId: string) {
|
||||
const params = this.reqParams.append('ownerid', ownerId);
|
||||
let obs = this.http.get<{ownerid: string, token: string, siteurl: string}>(this.beUrl + 'api/wootoken', {headers: this.reqHeaders, params: params, observe: 'response'});
|
||||
obs.subscribe(tokenResponse => {
|
||||
if (tokenResponse.status == 200) {
|
||||
this.ownerId = tokenResponse.body!.ownerid;
|
||||
this.token = tokenResponse.body!.token;
|
||||
this.siteurl = tokenResponse.body!.siteurl;
|
||||
this._ownerIdUpdated.next(Object.assign({}, this).ownerId);
|
||||
this._tokenUpdated.next(Object.assign({}, this).token);
|
||||
this._siteurlUpdated.next(Object.assign({}, this).siteurl);
|
||||
} else {
|
||||
console.log('No WooCommerce token found');
|
||||
}
|
||||
});
|
||||
return obs;
|
||||
}
|
||||
|
||||
createWooToken(ownerId: string) {
|
||||
const params = this.reqParams.append('ownerid', ownerId);
|
||||
let obs = this.http.post(this.beUrl+'api/wootoken', {}, {headers: this.reqHeaders, params: params, observe: 'response'});
|
||||
obs.subscribe(responseData => {
|
||||
if (responseData.status == 202) {
|
||||
console.log('WooToken created.');
|
||||
} else {
|
||||
console.log('WooToken creation failed.');
|
||||
}
|
||||
});
|
||||
return obs;
|
||||
}
|
||||
}
|
16
src/app/xero.service.spec.ts
Normal file
16
src/app/xero.service.spec.ts
Normal file
|
@ -0,0 +1,16 @@
|
|||
import { TestBed } from '@angular/core/testing';
|
||||
|
||||
import { XeroService } from './xero.service';
|
||||
|
||||
describe('XeroService', () => {
|
||||
let service: XeroService;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({});
|
||||
service = TestBed.inject(XeroService);
|
||||
});
|
||||
|
||||
it('should be created', () => {
|
||||
expect(service).toBeTruthy();
|
||||
});
|
||||
});
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue