- Criado por Maria Gala Higgins, última alteração em jan 17, 2025
BRIDGE - Gestión de ClientPOS
© 2024 Napse. Todos los derechos reservados.
Fecha | Versión | Descripción | Autor |
---|---|---|---|
| 1.0 | Creación del documento | |
| 1.1 | Actualización de documento | |
| 1.2 | Actualización de documento |
Acerca de este manual
El presente manual tiene por finalidad la capacitación de los usuarios que deseen gestionar las imágenes y recursos del pos para la personalización del punto de venta de un cliente.
Brinda la información necesaria, con el nivel suficiente de detalle para que el usuario pueda entender la arquitectura del ClientPos, así como también su custamización y actualización.
¿Qué es el ClientPOS?
El archivo ClientPos.Zip, es un archivo de customización que mantiene el look & feel de cada cliente.
Al momento de instalar el BPos (producto base) se genera la estructura de directorios que contendrá las imágenes y recursos para la correcta visualización del POS.
Estas imágenes y recursos pueden ser customizadas y adaptadas para que el POS se visualice con los colores e imágenes de la marca, así como también, de ser necesario, el ocultamiento de botones que no sean utilizados por el cliente.
Cuando se realiza algún desarrollo nuevo o un fix, el mismo se hace sobre el producto. Al momento de realizar una actualización sobre la versión de producto que opera en el cliente debe considerarse la actualización del archivo ClientPos.Zip, para que al momento de que el cliente realice la actualización en el punto de venta no le superponga el archivo del producto base y quede con la tipografía, colores y logos correspondientes al cliente.
Los procesos de actualización de productos, en este caso de BPOS son gestionados desde DIRECTOR, Donde desde la versión Multiempresa 2.0 de DIRECTOR se incluye la gestión de los archivos ClientPOS de cada cliente.
Para mas información sobre el proceso de actualización de BPOS y la gestión de archivos ClientPOS.zip puede consultarse el documento:
DIRECTOR Multiempresas - Manual de usuario 2.0 - SMB,
sección 10.2 Administración de ClientPOS
Arquitectura
Archivo clientPOS.zip: Este archivo contiene imágenes y recursos para un cliente en particular. Si no existe el archivo se instalarán las imágenes y recursos predeterminados del producto base.
Nombre del Archivo: debe ser clientPOS.zip (es importante que el archivo se comprima directamente en formato zip, no basta con cambiar la extensión de un .rar)
Estructura del ClientPOS: Dentro del archivo debe informarse la ruta exacta del archivo a Modificar/Agregar: Ej: "\bridge\app\config\vouchers\templates\sales"
Para este ejemplo se crea la siguiente estructura de carpetas:
Una vez creada las carpetas se debe guardar el o los archivos como muestra la siguiente imagen:
Actualizados los archivos a modificar en el punto de venta, se debe guardar en formato .zip
Al avanzar con la instalación, se debe colocar la ubicación del archivo .zip para que el instalador lo tome y reemplace luego los archivos en las carpetas de instalación. Esta ubicación se gestiona desde DIRECTOR. Ver:
Modificación de archivos de imágenes del POS: El archivo "ClientPOS.zip" debe contener en su interior la siguiente estructura: "bridge\app\config\views\themes\synthesis" + "\archivo a modificar"
Se puede modificar o agregar cualquier archivo, para eso se debe especificar la ruta correspondiente y el nombre del archivo.
QUÉ CARPETA CORRESPONDE A CADA PANTALLA
Se accede por bridge\app\config\views\themes
- Si es para la otra pantalla (no cuadrada), las carpetas están en \bridge\app\config\views\themes\synthesis
- Si es para la pantalla cuadrada, las carpetas están en \bridge\app\config\views\themes\synthesis-square
Estructura de Directorios y Relación Pantalla/Carpeta
Cada directorio contendrá los archivos .fxml, archivos de estilos (.css), e imágenes que aplican a cada sección del pos.
/synthesis: General, inicio y LogIn
- Directorios
/additionaldata
- panelCardPlans.fxml
- panelCombobox.fxml
- panelContactMethod.fxml
- panelCustomers.fxml
- panelCustomersIdName.fxml
- panelEditCustomerFiscalData.fxml
- panelExternalSeller.fxml
- panelSerializedUnit.fxml
- panelShipment.fxml
- panelTenderType.fxml
- panelTexto.fxml
- panelTillAccounts.fxml
- panelUserSellers.fxml
- panelContactMethod.css
/adjustment
- cambioValores.css
- cambioValores.fxml
/authorization
- icon-key.png
- remoteAuthorization.fxml
- supervisor.fxml
- supervisor.css
/bannerPublicity
bannerPublicity.fxml
- /synthesis/bannerPublicity/img/
imagen2.png
imagen3.png
publi-coca05.jpg
/budget
- /synthesis/budget/history/
workflowHistory.css
workflowHistory.fxml
- /synthesis/budget/items/
budgetItems.css
budgetItems.fxml
icon-less.png
icon-more.png
icon-numero-serie.png
icon-reject-reason.png
- /synthesis/budget/notes/
notes.css
notes.fxml
- /synthesis/budget/search/
icon-check-stock.png
icon-fin-consult.png
icon-negocio-pedido.png
searchBudgets.css
searchBudgets.fxml
/commission
- commissionERPGoals.fxml
- commissionFilters.fxml
- commissionGoals.fxml
- report.css
- commissionERPGoals.css
/contingency
- contingencyAddData.fxml
- contingencyLoadInput.fxml
/control
- icon-finish.png
- icon-quantity.png
- noVenta.css
- noVenta.fxml
- tenderType.fxml
/credits
credit.css
credit.fxml
- /synthesis/credits/cards/
- cards.fxml
- /synthesis/credits/paymentCredit/
- paymentCredit.fxml
/extraCash
- extraCashPopup.fxml
/findcustomers: Búsqueda de clientes
findCustomers.css
findCustomers.fxml
icon-alta-empresa.png
icon-alta-persona.png
icon-credit-info-45.png
icon-credit-info.png
icon-edit-persona.png
icon-fidelidad.png
icon-fin-consult.png
icon-lectura-dni.png
icon-notes-customer.png
- /synthesis/findcustomers/content/party/
editCustomer.css
editCustomer.fxml
exemptionPane.fxml
icon-acceptContact.png
icon-acceptData.png
icon-cancelEdit.png
jurisdictionBox.fxml
newCustomer.css
newCustomer.fxml
showCreditInfo.fxml
/finditems: Búsqueda de ítems
findItems.css
findItems.fxml
findItemsAdvanced.fxml
icon-complement.png
icon-fin-consult.png
icon-picture.png
icon-related-items.png
icon-simil.png
icon-stock-general.png
icon-stock.png
itemAdding.css
itemAdding.fxml
- /synthesis/finditems/itemAttributes/
back.png
bola.png
bolaSel.png
itemAttributes.css
itemAttributes.fxml
next.png
- /synthesis/finditems/itemImages/
itemImage.css
itemImage.fxml
/findTransaction
findTransaction.css
findTransaction.fxml
icon-fin-consult.png
- /synthesis/findTransaction/content/
panelAssociatedSales.fxml
panelLayaway.css
panelLayaway.fxml
/findTrxWithoutReference
findTrxWithoutReference.fxml
finTrxWithoutReference.css
icon-fin-consult.png
/fiscal
fiscalFilesFilters.css
fiscalFilesFilters.fxml
report.css
reportFilters.fxml
/fonts
Montserrat-Black.otf
Montserrat-Bold.otf
Montserrat-Hairline.otf
Montserrat-Light.otf
Montserrat-Regular.otf
SIL Open Font License.txt
/franking
- confirmar.fxml
/keyboard
back-icon.png
enter-icon.png
icon-quantity.png
keyboard-back-icon.png
keyboard-icon.png
keyboard.css
keyboard.fxml
mic-icon.png
shift-icon.png
/layaway
historicoCuota.fxml
icon-cancel.png
icon-historial-1.png
icon-historial.png
layaway.css
layaway.fxml
layawayPayments.css
layawayPayments.fxml
/login
icon-query-customer.png
icon-query-items.png
icon-supervisor.png
login.css
login.fxml
loginSecond.fxml
/monederogiftcards
- monederogiftcards.css
- monederogiftcards.fxml
/numpad
back-icon.png
enter-icon.png
keyboard-icon.png
numpad.css
numpad.fxml
/orders
- /synthesis/orders/history/
- workflowHistory.css
- workflowHistory.fxml
- workflowHistory.fxml.svnpatch.rej
- /synthesis/orders/items/
icon-less.png
icon-more.png
icon-notes.png
icon-numero-serie.png
icon-reject-reason.png
orderItems.css
orderItems.fxml
- /synthesis/orders/notes/
notes.css
notes.fxml
notes.fxml.svnpatch.rej
- /synthesis/orders/search/
icon-block.png
icon-fin-consult.png
searchOrders.css
searchOrders.fxml
/payment
icon-amex.png
icon-aplazo.png
icon-atrato.png
icon-back-sales.png
icon-bbva-cheque.png
icon-bbva-deposito-efectivo.png
icon-bbva-transferencia.png
icon-bbva.png
icon-billetera-virtual.png
icon-bimo.png
icon-card.png
icon-cash.png
icon-cdni.png
icon-checks.png
icon-contactless.png
icon-credit-card-off.png
icon-credit-card-on.png
icon-credit-card.png
icon-credit-note.png
icon-credit.png
icon-cupones.png
icon-delivery.png
icon-dollar.png
icon-efectivo-real.png
icon-euros.png
icon-fidelidad.png
icon-finish.png
icon-flota.png
icon-fuga.png
icon-giftcard.png
icon-go-cuotas.png
icon-hsbc-cheque.png
icon-hsbc-deposito-efectivo.png
icon-hsbc-transferencia.png
icon-hsbc.png
icon-intencion-pago.png
icon-izipay.png
icon-klap.png
icon-kueskipay.png
icon-link-pagos.png
icon-lkpy.png
icon-maestro.png
icon-master.png
icon-mercado-pago.png
icon-mobo-efectivo.png
icon-mobofacil.png
icon-modo.png
icon-monedero.png
icon-naranja.png
icon-operator.png
icon-payjoy.png
icon-paystore.png
icon-pedidosya.png
icon-pei.png
icon-pesosar.png
icon-promos.png
icon-rappi.png
icon-reales.png
icon-sales.png
icon-surtidor-sin-retorno.png
icon-todo-pago.png
icon-trade.png
icon-transfer.png
icon-ubereats.png
icon-visa-electron.png
icon-visa.png
icon-void-transaction.png
icon-yacare.png
pagos.css
pagos.fxml
pagosSecond.fxml
- /synthesis/payment/cards/
- cards.fxml
- /synthesis/payment/creditNotes/
- notasCredito.fxml
- /synthesis/payment/paymentPlans/
bankList.fxml
checkPlans.fxml
layawayPlans.css
layawayPlans.fxml
planesPago.fxml
planesPagoDisjoin.fxml
/paymentOnAccount
infoPagosACuenta.css
- pagosCuenta.css
infoPagosACuenta.fxml
pagosCuenta.fxml
/popup
icon-aviso.png
icon-error.png
icon-info.png
icon-war.png
warningBig.css
warning.css
request.css
error.css
lock.css
customerLoyaltyInfo.css
externalDepositoryAccounts.css
itemRelated.fxml
lock.fxml
posMonitorStatusList.fxml
recoverTransaction.fxml
request-boolean.fxml
request-booleanYesNo.fxml
request-combobox.fxml
request-noroot.fxml
request-notification.fxml
request-text-simple.fxml
request-text.fxml
request.fxml
scanValue.fxml
selectChangeOption.fxml
selectCustomerMailOption.fxml
selectWitnessReportShiftContentPane.fxml
selectWitnessReportTenderRepositoryContentPane.fxml
warning.fxml
warningBig.fxml
warningBudget.fxml
changePassword.fxml
channelSelection.fxml
customerDiscountContentPane.fxml
background.fxml
customerLoyaltyInfo.fxml
donationData.fxml
error.fxml
eventsView.fxml
externalDepositoryAccounts.fxml
form8001Data.fxml
- /synthesis/popup/automaticNCC/
- automaticNcc.css
- automaticNcc.fxml
- /synthesis/popup/linesPrinter/
- linesPrinterPopup.fxml
- /synthesis/popup/returnItem/
- returnItemPopup.fxml
/promoSimulation
promoRedeemPointSimulation.css
promoRedeemPointsSimulation.fxml
promoSimulation.css
promoSimulation.fxml
/repairManagement
detailRepairManagements.css
detailRepairManagements.fxml
icon-bill.png
icon-deliver.png
icon-fin-consult.png
- /synthesis/repairManagement/search/
icon-bill.png
icon-deliver.png
icon-fin-consult.png
searchBudgets.css
searchRepairManagements.fxml
/reprint
findReprint.css
findReprint.fxml
icon-fin-consult.png
itemsReprint.css
itemsReprint.fxml
reprintFilter.fxml
- /synthesis/reprint/reprintTransaction/
- reprintTransaction.css
- reprintTransaction.fxml
/sales
icon-afinidad.png
icon-back-sales.png
icon-budget-payment.png
icon-cash.png
icon-cashdrawer-open.png
icon-consult-info.png
icon-credit-card.png
icon-department-sales.png
icon-discont-amount.png
icon-discont-percent.png
icon-discount-amount.png
icon-discount-percent.png
icon-exchange.png
icon-finish.png
icon-gas-station.png
icon-intencion-pago.png
icon-less.png
icon-more.png
icon-notes-reference.png
icon-notes.png
icon-operator.png
icon-otherPromotions.png
icon-promos.png
icon-refresh.png
icon-related-items.png
icon-seller.png
icon-shipment.png
icon-suspend-transaction.png
icon-warranties.png
sales.css
sales.fxml
salesSecond.css
salesSecond.fxml
shipmentInnerPane.fxml
- /synthesis/sales/content/
- icon-quantity.png
- /synthesis/sales/content/dataRequiredWarranty/
- dataRequieredWarranty.fxml
- /synthesis/sales/content/dataRequiredWarranty/
- /synthesis/sales/content/gasStation/
button-gas-station-amarillo.png
button-gas-station-blanco.png
button-gas-station-verde.png
gasStation.css
gasStation.fxml
icon-arrow-left.png
icon-arrow-right.png
- /synthesis/sales/content/gasStation/
- /synthesis/sales/content/notes/
- attachNotes.css
- attachNotes.fxml
- /synthesis/sales/content/notes/
- /synthesis/sales/content/policyNumber/
- policyNumber.fxml
- /synthesis/sales/content/policyNumber/
- /synthesis/sales/content/promotions/
- panelPromociones.css
- panelPromociones.fxml
- /synthesis/sales/content/promotions/
- /synthesis/sales/content/quickSales/
icon-arrow-down.png
icon-arrow-left.png
icon-arrow-right.png
icon-arrow-up.png
icon-cancel.png
icon-magnitude.png
icon-price.png
icon-quantity.png
icon-search.png
panelVenta.css
quickSales.css
quickSales.fxml
suggestions-background-bottom.png
suggestions-glow.png
suggestions-icon.png
suggestions-ok.png
- /synthesis/sales/content/quickSales/
- /synthesis/sales/content/relatedfinditems/
btn_before_over.png
btn_before.png
btn_finalizar_consulta_over.png
btn_finalizar_consulta.png
btn_next_over.png
btn_next.png
btn_tecladoalfanumerico_over.png
btn_tecladoalfanumerico.png
btn_tecladonumeros_over.png
btn_tecladonumeros.png
filaTabla.fxml
findRelatedItemsSales.css
findRelatedItemsSales.fxml
fondo.png
sub_agregar_articulo_over.png
sub_agregar_articulo.png
sub_ver_stock_gral_over.png
sub_ver_stock_gral.png
sub_ver_stock_over.png
sub_ver_stock.png
waitingFilaTabla.fxml
- /synthesis/sales/content/relatedfinditems/
- /synthesis/sales/content/repairInformation/
- repairInformation.fxml
- /synthesis/sales/content/repairInformation/
- /synthesis/sales/content/sales/
cambio-de-precios.png
icon-cancel.png
icon-cupones.png
icon-magnitude.png
icon-notes.png
icon-price.png
icon-quantity.png
icon-search.png
magnitude.png
panelVenta.css
panelVenta.fxml
suggestions-background-bottom.png
suggestions-glow.png
suggestions-icon.png
suggestions-ok.png
- /synthesis/sales/content/sales/
- /synthesis/sales/content/sales/margin/
icon-light-green.png
icon-light-grey.png
icon-light-red.png
icon-light-yellow.png
- /synthesis/sales/content/sales/margin/
- /synthesis/sales/content/stock/
btn_aceptar_over.png
btn_aceptar.png
btn_before_over.png
btn_before.png
btn_cancelar_over.png
btn_cancelar.png
btn_next_over.png
btn_next.png
filaTabla.fxml
fondo.png
stock.css
stock.fxml
- /synthesis/sales/content/stockItem/
icon-block.png
icon-unblock.png
stockItem.fxml
stockItemTable.css
stockItemTable.fxml
- /synthesis/sales/content/stockReserve/
btn_aceptar_over.png
btn_aceptar.png
btn_cancelar_over.png
btn_cancelar.png
confirmar.css
confirmar.fxml
fondo_cancelacion.png
- /synthesis/sales/content/warranties/
- warranty.css
- warranty.fxml
- /synthesis/sales/content/stock/
- /synthesis/sales/departments/
- departments.xml
- /synthesis/sales/departments/images/
- ckone.png
- perfumeria.png
- /synthesis/sales/itemDetails/
detalle.css
detalle.fxml
icon-delete-hover.png
icon-delete.png
icon-sale.png
icon-war.png
- /synthesis/sales/itemPriceChange/
- itemPriceChange.css
- itemPriceChange.fxml
- /synthesis/sales/return/
- itemsDevolucion.css
- itemsDevolucion.fxml
- /synthesis/sales/shipmentDocuments/
- shipmentDocuments.css
- shipmentDocuments.fxml
/screensaver
- screensaver.css
- screensaver.fxml
- /synthesis/screensaver/img/
imagen-BridgeCore.jpg
imagen-BridgeManager.jpg
imagen-BridgePOS.jpg
imagen-BridgeWeb.jpg
imagen-Promo.jpg
imagen-Vtol.jpg
/selection: Pantalla Principal
- selection.css
- selection.fxml
- /synthesis/selection/findTransaction/
- findTransactionFilters.fxml
- /synthesis/selection/order/
- orderSubTypeSelect.css
- orderSubTypeSelect.fxml
- /synthesis/selection/paymentOnAccount/
amountInstallmet.fxml
icon-cash.png
icon-delete-interest.png
icon-fin-consult.png
icon-foreign.png
installmentForeign.css
installmentForeign.fxml
installmentsView.css
installmentsView.fxml
paymentForeign.css
paymentForeign.fxml
paymentOnAccount.fxml
- /synthesis/selection/reason/
reasonItemSelect.fxml
reasonSelect.css
reasonSelect.fxml
reasonSelectItem.css
- /synthesis/selection/recoverTransaction/
- recoverTransaction.css
- recoverTransaction.fxml
- /synthesis/selection/resumeTransaction/
- retomarTrx.fxml
- retomarTrxs.fxml
- /synthesis/selection/resumeTransaction/suspended/
icon-cash.png
icon-credit.png
selectMultiTransactions.css
selectMultiTransactions.fxml
suspendedTransaction.fxml
- /synthesis/selection/resumeTransaction/suspended/
- /synthesis/selection/selectTransaction/
- proccesTransactions.fxml
- selectTransaction.fxml
/shipment
icon-back-sales.png
icon-confirm.png
icon-home.png
icon-void-transaction.png
shipment.css
shipment.fxml
/storeClose
closePeriod.fxml
error.fxml
finish.fxml
init.fxml
preValidations.fxml
storeClose.css
storeClose.fxml
storeCloseStatus.fxml
validateClosedTerminals.fxml
validateConciliateTerminals.fxml
/transfer
- transferenciaTerminal.fxml
/virtualCharge
- virtualCharge.fxml
- virtualChargePopup.fxml
Archivos de Imagenes '.png'
- background-dark.png
- background.png
- brand-logo.png
- button-glow.png
- coupon.png
- event.png
- icon-back.png
- icon-cancel.png
- icon-clock.png
- icon-close-session.png
- icon-edit-persona.png
- icon-light-green.png
- icon-light-grey.png
- icon-light-red.png
- icon-light-yellow.png
- icon-lock-session.png
- icon-operator.png
- icon-order-notification-not-available.png
- icon-order-notification-pending.png
- icon-order-notification.png
- icon-paging-back.png
- icon-paging-next.png
- keyboard-up-button.png
- person-logo.png
- returnReference-logo.png
- sts-logo-full.png
- sts-logo.png
Estilos
- general.css
- loader.css
'.fxml'
- loader.fxml
ClientPOS - IMÁGENES
Cambio de imagen Background y logos de la marca
Para el cambio de la imagen de fondo y logo de la marca, en el clientPos.zip deberá de reemplazarse los siguientes archivos en el directorio ...\bridge\app\config\views\themes\synthesis:
- background.png
- background-dark.png
- brand-logo.png
- sts-logo-full.png
Deberá tenerse en cuenta las dimensiones de las imágenes a reemplazar, a fin de que la estética y ubicación en el POS de las imágenes no se vean afectadas.
Ejemplo:
Al iniciar el pos, su pantalla de carga es la siguiente:
Con fondo negro y el logo de producto base.
La pantalla de logIn y el menú principal son los siguientes (producto base):
Luego de reemplazados los archivos background.png, background-dark.png, brand-logo.png, sts-logo-full.png por los de la marca la pantalla de carga, logIn y menú principal se verán de la siguiente forma:
Archivos de Imágenes en 'general.css'
Los archivos .png gestionados por el archivo general.css son:
brand-logo.png
sts-logo-full.png
sts-logo.png
icon-cancel.png
person-logo.png
icon-edit-persona.png
returnReference-logo.png
icon-close-session.png
icon-lock-session.png
icon-back.png
icon-paging-back.png
icon-paging-next.png
icon-operator.png
keyboard-up-button.png
icon-order-notification.png
icon-order-notification-not-available.png
icon-order-notification-pending.png
Archivos de Imágenes en 'loader.css'
Los archivos .png gestionados por el archivo loader.css (login) son:
- background.png
El procesamiento para el cambio o actualización de las imágenes (.png) gestionados por todos los .css es el mismo que el descripto mas arriba para el cambio del logo e imagen de fondo.
ClientPOS - ESTILOS
Los archivos CSS tiene la finalidad de definir estilos personalizados para una aplicación, incluyendo atributos visuales como fuente, color, tamaño, márgenes, rellenos, bordes y otros efectos visuales. Los cambios que se realicen en estos archivos modificaran la visual general del POS, asimismo, cada sección podrá contener un archivo .css y .fxml que aplique solamente a la sección que se desea modificar y no a todo el estilo en general, es decir si dos reglas tienen la misma especificidad, la última regla cargada o definida será la que se aplique.
El archivo .css involucrado en la visualización general del POS son:
Archivo general.css
En este apartado realizaremos un breve resumen de las reglas definidas en este archivo.
Definición de Fuentes
El código define varias versiones de la fuente Montserrat
usando la regla @font-face
. Esto permite que se utilicen diferentes estilos y pesos de la fuente en la aplicación.
@font-face { font-family: 'Montserrat'; font-weight: bolder; src: url('fonts/Montserrat-Black.otf'); } @font-face { font-family: 'Montserrat'; font-weight: bold; src: url('fonts/Montserrat-Bold.otf'); } @font-face { font-family: 'Montserrat'; font-weight: normal; src: url('fonts/Montserrat-Regular.otf'); } @font-face { font-family: 'Montserrat'; font-weight: lighter; src: url('fonts/Montserrat-Light.otf'); } @font-face { font-family: 'Montserrat Hairline'; src: url('fonts/Montserrat-Hairline.otf'); }
Definición de Colores Globales
Se definen colores globales para la interfaz utilizando propiedades personalizadas dentro de la clase .root
.
.root { brand-color: #000000; selection-color: #282525; void-color: #D85980; voided-color: #D8CF7C; focus-text-color: #BBBCBF; popup-color: #231F20; popup-header-color: #414042; pending-color: #D8CF7C; accepted-color: #006838; button-color: #1B75BC; error-color: #7F1320; price-box-color: #282525; }
Estilos de Texto
Define estilos para el texto, incluyendo la familia de fuentes y colores.
.text{ -fx-font-family: 'Montserrat'; -fx-font-weight: normal; -fx-text-fill: white; } .invalid { -fx-text-fill: red; }
Imágenes de Logos
Define estilos para las imágenes de los logos.
.brand-logo { -fx-image: url("brand-logo.png"); } .sts-logo-full { -fx-image: url("sts-logo-full.png"); } .sts-logo { -fx-image: url("sts-logo.png"); -fx-effect: dropshadow(three-pass-box, shadow-color, 80, 0.45, 20, 0); }
Estilos de Títulos y Etiquetas
Define estilos específicos para títulos y etiquetas.
.title { -fx-font: bold 28pt 'Montserrat'; -fx-text-fill: white; -fx-effect: dropshadow(three-pass-box, rgba(0,0,0,0.4), 7, 0.5, 2, 2); } .label, .check-box .label, .radio-button .label { -fx-font: bold 10pt 'Montserrat'; -fx-text-fill: white; }
Estilos para Áreas de Texto
Define los estilos de las áreas de texto.
.text-area { -fx-background-color: #111111; -fx-border-color: #000000; -fx-font: lighter 18pt 'Montserrat'; -fx-text-fill: white; }
Estilos para Botones
Define estilos para diferentes tipos de botones y sus estados.
.button, .toggle-button, .menu-button { -fx-background-color: transparent; -fx-font: lighter 20pt 'Montserrat'; -fx-text-fill: white; -fx-border-color: button-color; -fx-border-width: 2pt 2pt 2pt 2pt; } .button:hover, .menu-button:hover , .toggle-button:hover { -fx-background-color: button-color; } .button:armed , .toggle-button:armed{ -fx-background-color: selection-color; -fx-scale-x: 1.15; -fx-scale-y: 1.15; }
Estilos para Campos de Texto
Define los estilos para los campos de texto, incluyendo los estados de foco e invalidez.
.text-field { -fx-background-color: #111111; -fx-border-color: #000000; -fx-border-width: 1pt; -fx-font: lighter 20pt 'Montserrat'; -fx-text-fill: white; } .text-field:focused{ -fx-background-color: #0F0F0F; -fx-text-fill: focus-text-color; } .validable-text-field-invalid { -fx-background-color: #111111; -fx-border-color: #000000; -fx-border-width: 1pt; -fx-font: lighter 20pt 'Montserrat'; -fx-text-fill: red; }
Estilos para Vistas de Tablas
Define estilos para diferentes partes de las tablas, como los encabezados, filas y celdas.
.table-view .column-header .label { -fx-text-fill: white; -fx-font: lighter 15pt 'Montserrat'; } .table-view .table-row-cell:focused { -fx-background-color: selection-color; } .table-view .table-row-cell:void { -fx-background-color: void-color; } .table-view .table-row-cell:voided { -fx-background-color: voided-color; }
Estilos para Vistas de Listas
Define estilos para las celdas de las listas.
.list-view .list-cell { -fx-background-color: transparent; -fx-font: lighter 16pt 'Montserrat'; -fx-text-fill: white; }
Estilos para Barras de Desplazamiento
Define estilos para las barras de desplazamiento.
.scroll-bar .thumb { -fx-background-color: silver; -fx-border-width: 0; -fx-background-radius: 12; } .scroll-bar .thumb:hover, .scroll-bar .thumb:pressed { -fx-effect: dropshadow(gaussian, selection-color, 27.0, 0.1, 0.0, 0.0); }
Otros Estilos
Define estilos para otros componentes de la interfaz, como botones específicos, campos personalizados, etc.
.lower-bar { -fx-background-color: transparent; -fx-min-width: 100%; } .lower-button { -fx-font: 10pt 'Montserrat'; -fx-text-fill: white; }
Pantalla de inicio y LogIn
En este apartado realizaremos un breve resumen de las reglas definidas en los archivos loader.css y loader.fxml.
Archivo loader.css
El archivo loader.css
contiene reglas de estilo específicas para elementos que están involucrados en la pantalla de login del POS. (Si general.css
también tiene reglas para .errorText
, estas podrían ser sobrescritas por las de loader.css
o viceversa, dependiendo del orden en que se carguen las hojas de estilo).
imagen Background - Login
Esta regla aplica un fondo específico (background.png
) . Esto establece el fondo visual de la pantalla de login.
.root { -fx-background-image: url("background.png"); }
Barra de progreso
Esta regla define el color de fondo y el estilo de borde (en este caso, sin borde) para la barra de progreso del login.
.progress-bar .track { -fx-background-color: black; -fx-border-style: none; }
Barra de progreso interna
.progress-bar .bar { -fx-background-color: #195C89; -fx-border-style: none; }
Texto de Error
Define el estilo para los textos de error, incluyendo la fuente, tamaño y color del texto.
.errorText { -fx-font: bold 16pt 'Montserrat'; -fx-text-fill: #ff0b0c; }
Archivo loader.fxml
El archivo loader.fxml
define la estructura y los componentes de la interfaz de usuario para la pantalla de login del Pos. El orden de las hojas de estilo en el FXML define la prioridad de aplicación de los estilos, con loader.css
aplicándose después de general.css
.
Estructura del archivo loader.fxml:
Declaración FXML y Importaciones:
Define que el documento es un archivo FXML y especifica la versión y la codificación e importa clases necesarias de Java y JavaFX para usar en este archivo FXML.
<?xml version="1.0" encoding="UTF-8"?> <?import java.lang.*?> <?import java.net.*?> <?import javafx.scene.control.*?> <?import javafx.scene.image.*?> <?import javafx.scene.layout.*?>
Contenedor Principal <AnchorPane>
Es el contenedor principal que permite anclar nodos hijos a las cuatro esquinas del panel, así como también define las dimensiones mínimas, preferidas y máximas del contenedor y aplica la clase de estilo root
a este contenedor.
<AnchorPane id="AnchorPane" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" minHeight="768.0" minWidth="1024.0" prefHeight="768.0" prefWidth="1360.0" style="" styleClass="root" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"> ... </AnchorPane>
Barra de Progreso <ProgressBar>
Define una barra de progreso para mostrar el estado de carga. También especifica las dimensiones y la posición anclada de la barra de progreso. Y establece el progreso inicial en 0% (progress="0.0")
<ProgressBar fx:id="progressBar" maxHeight="-Infinity" maxWidth="1.7976931348623157E308" minHeight="-Infinity" minWidth="1024.0" prefHeight="14.0" prefWidth="1360.0" progress="0.0" style="" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" />
Contenedor Vertical <VBox>
Es un contenedor, que organiza sus hijos en una columna vertical, define la posición y alineación del VBox, aplica la clase de estilo errorText
al VBox y sus hijos y contiene un ImageView
para mostrar una imagen y un Label
para mostrar mensajes de error.
<VBox alignment="CENTER" layoutX="341.0" layoutY="218.0" spacing="50.0" styleClass="errorText" AnchorPane.bottomAnchor="50.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> <children> <ImageView pickOnBounds="true" preserveRatio="true" styleClass="sts-logo-full" /> <Label fx:id="message" styleClass="errorText" /> </children> </VBox>
Estilos
Define que general.css
y loader.css
se aplicarán a los elementos definidos en este archivo FXML.
<stylesheets> <URL value="@general.css" /> <URL value="@loader.css" /> </stylesheets>
Interacción con general.css y loader.css
1 .root:
El AnchorPane tiene la clase root, lo que significa que se aplicarán las reglas de estilo de .root de ambas hojas de estilo (general.css y loader.css). La imagen de fondo (background.png) definida en loader.css se aplicará al AnchorPane.
2 .progress-bar .track y .progress-bar .bar:
El ProgressBar utilizará las reglas de estilo definidas en loader.css para la pista y la barra interna, dándoles un fondo negro y un color de barra específico.
3 .errorText:
El VBox y el Label dentro de él usarán la clase errorText que define una fuente en negrita y un color de texto rojo en loader.css. Esta clase asegura que los mensajes de error se muestren claramente.
4 .sts-logo-full:
El ImageView que tiene la clase sts-logo-full aplicará los estilos correspondientes de general.css, como la imagen y el posible efecto de sombra si está definido.
ClientPOS - Layout Desing
Introducción a la Configuración de ClientPOS - Diseño de Layout
En esta sección, se describen los pasos necesarios para ajustar las propiedades de los elementos en ClientPOS a través de archivos .properties
. Este enfoque permite realizar cambios en la interfaz de usuario sin modificar directamente los archivos .fxml
, lo que facilita la personalización y mantenimiento del diseño.
Propiedades para ajustar cambios en ClientPOS
Para realizar modificaciones en ClientPOS, es necesario seguir estos pasos:
Identificación del archivo .fxml: Primero, localice el archivo
.fxml
que contiene la definición del componente que desea modificar.Creación del archivo .properties: Cree un archivo
.properties
con el mismo nombre que el archivo.fxml
y colóquelo en el mismo directorio. Este archivo contendrá las nuevas propiedades que se aplicarán al componente.
Ejemplo de cambio de nombre de un botón
Pasos para cambiar el texto de un botón en el archivo selection.fxml
.:
1.Buscar el campo en el archivo .fxml: Encuentre la definición del botón dentro del archivo .fxml
. Por ejemplo:
Dentro de este archivo, encontramos la definición para el botón "VENTAS" que se muestra en el MENÚ PRINCIPAL
... <Button id="SalesOperation" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" onAction="#onSalesOperation" prefHeight="100.0" prefWidth="258.0" text="VENTA" textAlignment="CENTER" wrapText="true" /> ...
2.Validar el ID del campo: Asegúrese de que el campo tenga un identificador único (id), como id="SalesOperation"
.
El id de este botón es id="SalesOperation" y el texto a mostrar esta definido en text="VENTA"
Cree o edite el archivo .properties
correspondiente (selection.properties
en este caso) y añadir la línea:
# Archivo de propiedades para ajustes en ClientPOS # Cambios en nombres de botones y etiquetas del MENÚ PRINCIPAL id.SalesOperation.text.string = SALES
Luego de guardados los cambios, y reiniciado el pos, el menú principal mostrara el nuevo texto para el botón de ventas.
Este procedimiento permite cambiar el texto mostrado en el botón de "VENTA" a "SALES" sin necesidad de editar el archivo .fxml
directamente.
Ejemplo de cambio tamaño de un botón
- Buscar en el 'archivo.fxml' el campo a modificar :
{{ <Button id="finishOperationButton" text="BUSCAR"/> }}
- Validar que tenga id el campo que queremos cambiar el nombre(ej : id="finishOperationButton")
- Modificar en archivo.properties : id.finishOperationButton.prefWidth.double = 100.0
Ejemplo:
- Nombre del archivo .fxml = findItems.fxml
Dentro de este archivo, encontramos la definición para el botón "BUSCAR" que se muestra en la pantalla de Búsqueda de Artículos
... <Button id="finishOperationButton" fx:id="finishOperationButton" defaultButton="true" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" onAction="#onFindItems" prefHeight="68.0" prefWidth="160.0" text="BUSCAR" /> ...
El id de este botón es id="finishOperationButton" y el texto a mostrar esta definido en text="BUSCAR"
Se genera el archivo findItems.properties con el siguiente formato:
# Archivo de propiedades para ajustes en ClientPOS # Cambios en nombres de botones y etiquetas de BUSQUEDA DE ARTICULOS id.finishOperationButton.prefWidth.double = 100.0
Luego de guardados los cambios, y reiniciado el pos, el botón de Buscar se mostrara mas pequeño en la pantalla de búsqueda de artículos.
Ejemplo para agregar o quitar clases .CSS
- Para modificar la lista de clases se debe agregar una entrada con la propiedad "styleClass" y luego "add" o "remove"
- Ejemplo: para agregar una clase CSS, agregar: fxid.customerButton.styleClass.add=hide
- Ejemplo: para quitar una clase CSS, agregar: fxid.customerButton.styleClass.remove=hide
Siguiendo el ejemplo anterior, donde se cambio el tamaño del botón "BUSCAR", para que la visualización del botón sea correcta, deberá de modificarse la fuente de la leyenda BUSCAR en el botón.
Para ello agregaremos en el .properties una nueva línea para agregar una clase al CSS que gestiona las fuentes de los botones, en este caso, "general.css"
# Archivo de propiedades para ajustes en ClientPOS # Cambios en nombres de botones y etiquetas de BUSQUEDA DE ARTICULOS id.finishOperationButton.prefWidth.double = 100.0 #Cambiar tamaño de fuente al botón BUSCAR en BUSQUEDA DE ARTICULOS fxid.finishOperationButton.styleClass.add=hide
Hecho esto, deberá agregarse una nueva regla en el archivo general.css para que el cambio de fuente solo aplique al botón "BUSCAR"
... /* Nueva regla CSS para el botón BUSCAR */ #finishOperationButton { -fx-font-size: 10px; /* Ajusta el tamaño de la fuente botón BUSCAR en Buscar Articulo */ } ...
Luego de guardados los cambios, y reiniciado el pos, la leyenda del botón BUSCAR se mostrara mas pequeño en la pantalla de búsqueda de artículos.
Ejemplo para ocultar un botón
- Buscar en el 'archivo.fxml'el campo a modificar :
<Button id="catalogToggleButton" /> - Validar que tenga id el campo que queremos cambiar el nombre(ej : id="catalogToggleButton")
- Modificar la visibilidad del botón en el archivo.properties: id.catalogToggleButton.visible.boolean=false
- Agregar para que no ocupe lugar el boton: id.catalogToggleButton.managed.boolean=false
Ejemplo:
- Nombre del archivo .fxml = sales.fxml
Dentro de este archivo, encontramos la definición para el botón "VENTA POR CATALOGO" que se muestra en la pantalla de Venta
... <ToggleButton fx:id="catalogToggleButton" contentDisplay="TOP" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" onAction="#onDepartments" prefHeight="70.0" prefWidth="70.0" textAlignment="CENTER"> <styleClass> <String fx:value="button" /> <String fx:value="department-sales" /> </styleClass> <HBox.margin> <Insets bottom="2.0" left="1.0" right="1.0" top="2.0" /> </HBox.margin> </ToggleButton> ...
El id de este botón es id="catalogToggleButton"
Se genera el archivo sales.properties con el siguiente formato:
# Archivo de propiedades para ajustes en ClientPOS # Cambios en nombres de botones y etiquetas de Pantalla de VENTA #ocultar botón Venta por Catálogo id.catalogToggleButton.visible.boolean=false #Ajuste para que no ocupe lugar el botón id.catalogToggleButton.managed.boolean=false
Luego de guardados los cambios, y reiniciado el pos, el botón de venta por catálogo no se mostrará en la pantalla de venta.
Ejemplo para modificar la ubicación dentro de una grilla (gridPane)
Para modificar el posicionamiento de elementos dentro de un GridPane, se debe agregar al .properties "gridPane" y luego una de las siguientes opciones: "rowIndex", "columnIndex", "rowSpan", "columnSpan".
- Ejemplo: para cambiar la columna: id.quantity-button.gridPane.columnIndex=4
- Ejemplo: para cambiar la cantidad de columnas que ocupa: id.search-box-text.gridPane.columnSpan=4
Ejemplo:
- Nombre del archivo .fxml = newCustomer.fxml
Dentro de este archivo, encontramos la definición para la sección de DATOS PERSONALES en el alta de clientes (tanto cliente Persona o cliente empresa)
<children> <Label text="* DATOS OBLIGATORIOS" GridPane.columnSpan="2147483647" GridPane.rowIndex="5" /> <Label text="NÚMERO DE INGRESOS BRUTOS" wrapText="true" /> <Label fx:id="txtJurisdiction" text="JURISDICCIONES" GridPane.rowIndex="2" /> <ValidableTextField fx:id="txtIibbTaxNumber" GridPane.columnIndex="1" /> <ComboBox fx:id="cboIibbTaxCondition" prefHeight="57.0" prefWidth="360.0" GridPane.columnIndex="3" /> <ValidableTextField fx:id="txtIibbIssueDate" GridPane.columnIndex="1" GridPane.rowIndex="1" /> <ValidableTextField fx:id="txtIibbExpirationDate" GridPane.columnIndex="3" GridPane.rowIndex="1" /> <Label text="FECHA DE EXPEDICIÓN" wrapText="true" GridPane.rowIndex="1" /> <Label text="FECHA DE VENCIMIENTO" wrapText="true" GridPane.columnIndex="2" GridPane.rowIndex="1" /> <Label layoutX="15.0" layoutY="27.0" text="CONDICIÓN DE INGRESOS BRUTOS" wrapText="true" GridPane.columnIndex="2" /> <ListView fx:id="jurisdictionsList" prefHeight="200.0" prefWidth="200.0" GridPane.columnSpan="2147483647" GridPane.rowIndex="3" GridPane.rowSpan="2" /> </children>
Para los siguientes Id se modifican las opciones "columnIndex" y "rowIndex"
- habeasDataCheckBox
- habeasDataText
- cboHabeasDataChannels
- txtHabeasDataChannels
- txtExternalCode
- txt1ExternalCode
Se genera el archivo newCustomer.properties con el siguiente formato:
# Archivo de propiedades para ajustes en ClientPOS # Cambios en Ubicación dentro de la tabla #ACEPTA id.habeasDataCheckBox.gridPane.columnIndex=4 id.habeasDataCheckBox.gridPane.rowIndex=4 id.habeasDataText.gridPane.rowIndex=4 #CANAL AUTORIZACION id.cboHabeasDataChannels.gridPane.columnIndex=5 id.cboHabeasDataChannels.gridPane.rowIndex=4 id.txtHabeasDataChannels.gridPane.columnIndex=6 id.txtHabeasDataChannels.gridPane.rowIndex=4 #ID SOPORTE id.txtExternalCode.gridPane.rowIndex=2 id.txtExternalCode.gridPane.columnIndex=2 id.txt1ExternalCode.gridPane.rowIndex=2
Luego de guardados los cambios, y reiniciado el pos, la pantalla de Datos personales mostrara otra disposición de los componentes en la tabla.
También editaremos, para el alta de Cliente empresa la solapa de "Ingresos Brutos"
<children> <Label text="* DATOS OBLIGATORIOS" GridPane.columnSpan="2147483647" GridPane.rowIndex="5" /> <Label text="NÚMERO DE INGRESOS BRUTOS" wrapText="true" /> <Label fx:id="txtJurisdiction" text="JURISDICCIONES" GridPane.rowIndex="2" /> <ValidableTextField fx:id="txtIibbTaxNumber" GridPane.columnIndex="1" /> <ComboBox fx:id="cboIibbTaxCondition" prefHeight="57.0" prefWidth="360.0" GridPane.columnIndex="3" /> <ValidableTextField fx:id="txtIibbIssueDate" GridPane.columnIndex="1" GridPane.rowIndex="1" /> <ValidableTextField fx:id="txtIibbExpirationDate" GridPane.columnIndex="3" GridPane.rowIndex="1" /> <Label text="FECHA DE EXPEDICIÓN" wrapText="true" GridPane.rowIndex="1" /> <Label text="FECHA DE VENCIMIENTO" wrapText="true" GridPane.columnIndex="2" GridPane.rowIndex="1" /> <Label layoutX="15.0" layoutY="27.0" text="CONDICIÓN DE INGRESOS BRUTOS" wrapText="true" GridPane.columnIndex="2" /> <ListView fx:id="jurisdictionsList" prefHeight="200.0" prefWidth="200.0" GridPane.columnSpan="2147483647" GridPane.rowIndex="3" GridPane.rowSpan="2" /> </children>
Para los siguientes Id se modifican las opciones "columnSpan", "rowSpan" y "rowIndex"
- txtJurisdiction
- jurisdictionsList
En el archivo newCustomer.properties agregaremos la siguiente definición para la sección Jurisdicciones
#JURISDICCIONES id.txtJurisdiction.gridPane.rowIndex=4 id.txtJurisdiction.gridPane.columnSpan=2 id.jurisdictionsList.gridPane.columnSpan=2 id.jurisdictionsList.gridPane.rowIndex=5 id.jurisdictionsList.gridPane.rowSpan=4
Luego de guardados los cambios y reiniciado el pos, la pantalla de Ingresos Brutos para el cliente Empresa mostrara una disposición distinta para "Jurisdicciones" en la tabla.
Ejemplo para Cambio de Nombre de un Botón, modificar las propiedades de columnas y filas de manera independiente:
- El elemento que se debe referenciar es el GridPane
- El tercer parámetro en la línea debe ser gridPane.**
- El cuarto parámetro es una combinación de 3 partes:
- Las primeras 3 letras pueden ser "col" o "row" para hacer referencia a una columna o fila respectivamente
- A continuación, sigue un número entero, que referencia al número de fila o columna, comenzando desde cero
- Luego viene el nombre del campo que se quiere modificar. Por ahora solo soporta los campos de tipo double
#JURISDICCIONES id.txtJurisdiction.gridPane.rowIndex=4 id.txtJurisdiction.gridPane.columnSpan=2 id.jurisdictionsList.gridPane.columnSpan=2 id.jurisdictionsList.gridPane.rowIndex=5 id.jurisdictionsList.gridPane.rowSpan=4
En la sección columnConstraints (o rowConstraints) puede haber tantos tags ColumnConstraints (o RowConstraints) como columnas (o filas), los cuales están en orden.
Para realizar un cambio en esas constraints, se puede realizar de la siguiente manera:
id.grilla.gridPane.col0prefWidth=80.0
Ejemplo:
- Nombre del archivo .fxml = findItems.fxml
Dentro de este archivo, encontramos la definición para la ubicación de la HORA informada en la pantalla de Buscar Artículos
<GridPane id="findCustomerTable" layoutX="10.0" layoutY="10.0" AnchorPane.bottomAnchor="4.0" AnchorPane.rightAnchor="20.0"> <children> <Label text="V" GridPane.columnIndex="9" /> <HBox fx:id="operatorBox" alignment="CENTER" GridPane.columnSpan="10" GridPane.rowIndex="2"> <children> <Label alignment="CENTER" text="OPERADOR: " /> <Label id="userLabel" fx:id="userLabel" alignment="CENTER" text="MATEO GÓMEZ" wrapText="true" GridPane.rowIndex="2" /> </children> <GridPane.margin> <Insets /> </GridPane.margin> </HBox> <Clock format="dd/MM/yyyy" styleClass="clock-month" uppercase="true" GridPane.rowIndex="1" /> <Clock format="HH:mm" styleClass="clock-time" GridPane.columnIndex="2" GridPane.rowIndex="1" /> <Label id="terminal-label" fx:id="terminalLabel" text="10" wrapText="true" GridPane.columnIndex="6" GridPane.rowIndex="1" /> <MonitorVbox fx:id="statusMonitor" GridPane.columnIndex="8" GridPane.rowIndex="1" /> <Button fx:id="sessionButton" alignment="CENTER" contentDisplay="TOP" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" onAction="#onCloseSession" prefHeight="70.0" prefWidth="70.0" styleClass="close-session-button" textAlignment="CENTER" wrapText="true" GridPane.columnIndex="12" GridPane.rowSpan="2147483647" /> <Button fx:id="lockSessionButton" alignment="CENTER" contentDisplay="TOP" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" onAction="#onSpecialLogoff" prefHeight="70.0" prefWidth="70.0" styleClass="lock-session-button" textAlignment="CENTER" visible="false" wrapText="true" GridPane.columnIndex="12" GridPane.rowSpan="2147483647" /> <Label text="●" GridPane.columnIndex="1" GridPane.rowSpan="2" /> <Label layoutX="110.0" layoutY="16.0" text="●" GridPane.columnIndex="3" GridPane.rowSpan="2" /> <Label layoutX="310.0" layoutY="16.0" text="●" GridPane.columnIndex="7" GridPane.rowSpan="2" /> <Label text="FECHA" /> <Label text="HORA" GridPane.columnIndex="2" /> <Label text="T" GridPane.columnIndex="6" /> <Label text="E" GridPane.columnIndex="8" /> <Label layoutX="193.0" layoutY="19.0" text="●" GridPane.columnIndex="5" GridPane.rowSpan="2" /> <Label text="T" GridPane.columnIndex="4" /> <Label id="store-label" fx:id="storeLabel" text="01" GridPane.columnIndex="4" GridPane.rowIndex="1" /> <Label fx:id="versionLabel" alignment="BASELINE_RIGHT" GridPane.columnIndex="9" GridPane.rowIndex="1" /> <Button id="keyboard-button" fx:id="keyboardButton" alignment="CENTER" contentDisplay="TOP" layoutX="396.0" layoutY="10.0" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" onAction="#onKeyboard" prefHeight="70.0" prefWidth="70.0" textAlignment="CENTER" wrapText="true" GridPane.columnIndex="13" GridPane.rowIndex="1" /> <Label visible="false" managed="false" text="●" GridPane.columnIndex="10" GridPane.rowSpan="2" /> <Button visible="false" managed="false" fx:id="orderPendingButton" id="order-pending" onAction="#onShowPendingOrders" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="70.0" prefWidth="70.0" styleClass="icon-order-notification,order-notification-button" GridPane.columnIndex="11" GridPane.rowIndex="1" /> <Label visible="false" managed="false" fx:id="pendingOrdersQty" text="0" GridPane.columnIndex="11" /> </children> <columnConstraints> <ColumnConstraints halignment="CENTER" hgrow="SOMETIMES" minWidth="10.0" prefWidth="80.0" /> <ColumnConstraints halignment="CENTER" hgrow="SOMETIMES" maxWidth="-Infinity" minWidth="-Infinity" prefWidth="10.0" /> <ColumnConstraints halignment="CENTER" hgrow="SOMETIMES" minWidth="10.0" prefWidth="60.0" /> <ColumnConstraints halignment="CENTER" hgrow="SOMETIMES" maxWidth="-Infinity" minWidth="-Infinity" prefWidth="10.0" /> <ColumnConstraints halignment="CENTER" hgrow="SOMETIMES" minWidth="10.0" prefWidth="50.0" /> <ColumnConstraints halignment="CENTER" hgrow="SOMETIMES" minWidth="-Infinity" prefWidth="10.0" /> <ColumnConstraints halignment="CENTER" hgrow="SOMETIMES" minWidth="10.0" prefWidth="50.0" /> <ColumnConstraints halignment="CENTER" hgrow="SOMETIMES" maxWidth="-Infinity" minWidth="-Infinity" prefWidth="10.0" /> <ColumnConstraints halignment="CENTER" hgrow="SOMETIMES" minWidth="10.0" prefWidth="50.0" /> <ColumnConstraints halignment="CENTER" hgrow="SOMETIMES" minWidth="10.0" prefWidth="54.0" /> <ColumnConstraints halignment="CENTER" hgrow="SOMETIMES" maxWidth="-Infinity" minWidth="-Infinity" prefWidth="10.0" /> <ColumnConstraints halignment="CENTER" hgrow="SOMETIMES" minWidth="10.0" prefWidth="74.0" /> <ColumnConstraints halignment="CENTER" hgrow="SOMETIMES" minWidth="10.0" prefWidth="74.0" /> <ColumnConstraints halignment="CENTER" hgrow="SOMETIMES" minWidth="10.0" prefWidth="74.0" /> </columnConstraints> <rowConstraints> <RowConstraints maxHeight="-Infinity" minHeight="-Infinity" prefHeight="23.0" vgrow="SOMETIMES" /> <RowConstraints maxHeight="-Infinity" minHeight="-Infinity" prefHeight="23.0" vgrow="SOMETIMES" /> <RowConstraints maxHeight="-Infinity" minHeight="-Infinity" prefHeight="23.0" vgrow="SOMETIMES" /> </rowConstraints> </GridPane>
Para el siguiente Id del "GridPane"se modifican las opciones "prefWidth":
- findCustomerTable
En el archivo findItems.properties agregaremos la siguiente definición para el id findCustomerTable
#cambia las propiedades de columnas y filas de manera independiente - HORA id.findCustomerTable.gridPane.col2prefWidth=150.0
Luego de guardados los cambios y reiniciado el po, la pantalla de Buscar Artículos mostrará la Hora en pantalla con más espacio a ambos lados.
Ejemplo para cambiar ubicación de elementos dentro de un panel (anchorPane)
Para cambiar el espacio desde el borde del panel hasta los lados de un determinado elemento (dentro de un AnchorPane), se pueden utilizar las opciones "bottomAnchor", "leftAnchor", "rightAnchor", "topAnchor".
Ejemplo:
<AnchorPane ...> <children> <GridPane id="gridInterno" AnchorPane.leftAnchor="80.0" ...>
En este caso, se puede modificar el espacio lateral izquierda del GridPane con respecto al panel padre AnchorPane con la siguiente línea:
id.gridInterno.leftAnchor.double=80.0
Ejemplo:
- Nombre del archivo .fxml = selection.fxml
Dentro de este archivo, encontramos la definición para la ubicación de los botones dentro del panel del Menú Principal:
.... <AnchorPane maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" minHeight="-Infinity" minWidth="1024.0" prefHeight="768.0" prefWidth="1360.0" styleClass="root" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"> <children> <VBox layoutX="292.0" layoutY="10.0" AnchorPane.leftAnchor="20.0" AnchorPane.rightAnchor="1000.0" AnchorPane.topAnchor="150.0"> <children> <Label id="training-mode-label" fx:id="trainingModeLabel" text="MODO ENTRENAMIENTO" textAlignment="RIGHT" visible="false" wrapText="true" GridPane.columnSpan="2147483647" GridPane.halignment="CENTER" GridPane.valignment="CENTER" /> </children> </VBox> <Pane maxHeight="-Infinity" maxWidth="1.7976931348623157E308" minHeight="-Infinity" prefHeight="78.0" prefWidth="1360.0" styleClass="lower-bar" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" /> <GridPane id="selectionPane" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> <children> <FlowPane fx:id="noSaleFlowPane" hgap="10.0" styleClass="button-box" vgap="10.0" visible="false" GridPane.columnIndex="0" GridPane.rowIndex="2"> <children> <Button id="TenderLoan" fx:id="tenderLoanButton" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" onAction="#onTenderLoan" prefHeight="120.0" prefWidth="258.0" text="DOTACIÓN" textAlignment="CENTER" /> ....
Para el siguiente Id se modifican las opciones "bottomAnchor", "leftAnchor", "rightAnchor" y "topAnchor"
- selectionPane
En el archivo selection.properties agregaremos las siguientes definiciones para el id "selectionPane"
#CAMBIAR UBICACIÓN DE ELEMENTOS DENTRO DE UN PANEL (AnchorPane) id.selectionPane.bottomAnchor.double=80.0 id.selectionPane.leftAnchor.double=80.0 id.selectionPane.rightAnchor.double=80.0 id.selectionPane.topAnchor.double=80.0
Luego de guardados los cambios y reiniciado el pos la pantalla Menú Principal mostrara una disposición distinta de los botones de selección en la tabla.
Ejemplo para cambiar Padding (y otros) en varios tipos de paneles
Esta sección describe como cambiar propiedades como padding u otros que requieren objeto tipo Insets, como se ve en el siguiente ejemplo:
<HBox fx:id="hbox1" ...> <padding> <Insets top="2.0" right="0" bottom="2.0" left="0 /> </padding>
La propiedad padding se debe informar como cualquier otra, pero con tipo de campo insets.
Este tipo de propiedad tiene la particularidad de que necesita cuatro valores que deben ser especificados si o si.
Los cuatros valores deben estar ordenados en sentido horario partiendo de top, separados con coma y utilizando punto como separador decimal.
Como alternativa se puede colocar un solo número, el cual se aplicará a los 4 campos.
fxid.hbox1.padding.insets=2.0,0,2.0,0
Ejemplo:
- Nombre del archivo .fxml = pagos.fxml
Dentro de este archivo, encontramos la definición para la ubicación de los botones de pago en la pantalla de pagos
.... <HBox fx:id="buttonBox" alignment="BOTTOM_LEFT" spacing="5.0" styleClass="button-bar" visible="false" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0"> <children> <Button id="cash" fx:id="button_cash" alignment="CENTER" contentDisplay="TOP" focusTraversable="false" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" onAction="#showBox" prefHeight="70.0" prefWidth="70.0" styleClass="cash" textAlignment="CENTER" wrapText="true"> <HBox.margin> <Insets /> </HBox.margin> </Button> <Button id="credit-card" fx:id="button_cards" alignment="CENTER" contentDisplay="TOP" focusTraversable="false" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" onAction="#showBox" prefHeight="70.0" prefWidth="70.0" styleClass="credit-card" textAlignment="CENTER" wrapText="true"> <HBox.margin> <Insets /> </HBox.margin> </Button> <Button id="checks" fx:id="button_checks" alignment="CENTER" contentDisplay="TOP" focusTraversable="false" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" onAction="#showBox" prefHeight="70.0" prefWidth="70.0" styleClass="checks" textAlignment="CENTER" wrapText="true"> <HBox.margin> <Insets /> </HBox.margin> </Button> <Button id="credit" fx:id="button_credit" alignment="CENTER" contentDisplay="TOP" focusTraversable="false" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" onAction="#showBox" prefHeight="70.0" prefWidth="70.0" styleClass="credit" textAlignment="CENTER" wrapText="true"> <HBox.margin> <Insets /> </HBox.margin> </Button> <Button id="mgc" fx:id="monederoGiftCardButton" alignment="CENTER" contentDisplay="TOP" focusTraversable="false" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" onAction="#showBox" prefHeight="70.0" prefWidth="70.0" styleClass="gift-card" textAlignment="CENTER" wrapText="true"> <HBox.margin> <Insets /> </HBox.margin> </Button> <Button id="credit-note" fx:id="button_NCC" alignment="CENTER" contentDisplay="TOP" focusTraversable="false" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" onAction="#showBox" prefHeight="70.0" prefWidth="70.0" styleClass="credit-note" textAlignment="CENTER" wrapText="true"> <HBox.margin> <Insets /> </HBox.margin> </Button> <Button id="coupon" fx:id="button_coupon" alignment="CENTER" contentDisplay="TOP" focusTraversable="false" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" onAction="#showBox" prefHeight="70.0" prefWidth="70.0" styleClass="coupon" textAlignment="CENTER" wrapText="true"> <HBox.margin> <Insets /> </HBox.margin> </Button> <Button id="wallet" fx:id="button_wallet" alignment="CENTER" contentDisplay="TOP" focusTraversable="false" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" onAction="#showBox" prefHeight="70.0" prefWidth="70.0" styleClass="wallet" textAlignment="CENTER" wrapText="true"> <HBox.margin> <Insets /> </HBox.margin> </Button> <Button id="transfer" fx:id="button_transfer" alignment="CENTER" contentDisplay="TOP" focusTraversable="false" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" onAction="#showBox" prefHeight="70.0" prefWidth="70.0" styleClass="transfer" textAlignment="CENTER" wrapText="true"> <HBox.margin> <Insets /> </HBox.margin> </Button> <Button fx:id="button_reportIzipay" alignment="CENTER" contentDisplay="TOP" focusTraversable="false" layoutX="30.0" layoutY="12.0" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" onAction="#onIzipayReport" prefHeight="70.0" prefWidth="70.0" styleClass="izip" textAlignment="CENTER" wrapText="true"> <tooltip> <Tooltip text="Reporte detallado" /> </tooltip> </Button> <Button fx:id="button_client" alignment="CENTER" contentDisplay="TOP" focusTraversable="false" layoutX="30.0" layoutY="12.0" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" onAction="#onFindCustomers" prefHeight="70.0" prefWidth="70.0" styleClass="find-customers-button" textAlignment="CENTER" wrapText="true" /> <Button fx:id="button_client_fiscal" visible="false" alignment="CENTER" contentDisplay="TOP" focusTraversable="false" layoutX="30.0" layoutY="12.0" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" onAction="#onEditCustomersFiscalData" prefHeight="70.0" prefWidth="70.0" styleClass="edit-fiscal-data-customers-button" textAlignment="CENTER" wrapText="true" /> <Button fx:id="paymentIntentionButton" alignment="CENTER" contentDisplay="TOP" focusTraversable="false" layoutX="30.0" layoutY="12.0" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" mnemonicParsing="false" onAction="#onPaymentIntention" prefHeight="70.0" prefWidth="70.0" styleClass="payment-intention-button" textAlignment="CENTER" wrapText="true" /> </children> <padding> <Insets bottom="2.0" left="20.0" top="2.0" /> </padding> </HBox> ....
Para el siguiente Id se modifican las opciones de "padding" para el siguiente Id de HBox:
- buttonBox
En el archivo pagos.properties agregaremos las siguientes definiciones para el id "buttonBox"
#CAMBIAR PADDING EN VARIOS TIPOS DE PANELES - pagos fxid.buttonBox.padding.insets=15.0,15.0,180.0,0
Luego de guardados los cambios y reiniciado el pos, los botones de la pantalla de pagos se visualizarán de la siguiente forma:
ClientPOS - Gestión de archivos .VCL
En esta sección explicaremos cómo gestionar los archivos .vcl
que organizan la información a imprimir en los comprobantes fiscales y no fiscales. Estos archivos son fundamentales para la personalización y correcta emisión de los documentos legales necesarios en las transacciones de venta y no venta (se trate de un comprobante físico o por medio de los emuladores configurados para el pos).
El archivo VCL (Voucher Configuration Language) define la estructura y el contenido de los comprobantes generados en el sistema Bridge. Este archivo configura cómo se imprimen los tickets en el punto de venta, incluyendo información relevante para el cliente y los operadores, como los datos de transacciones, códigos de barras, items y referencias fiscales entre otros. Su objetivo es personalizar y estandarizar la presentación de la información de los comprobantes de acuerdo con los requisitos comerciales y legales.
La estructura de directorios donde se gestionan los documentos comienza en la siguiente ruta:
\bridge\app\config\vouchers
En este directorio, encontrará dos subdirectorios (default
y templates
) y el archivo clave velocimacros.vm
.
A continuación, proporcionaremos una visión detallada de cómo se utilizan estos elementos para configurar y gestionar los comprobantes.
Directorio 'default'
Este directorio contiene los detalles y estructuras de los comprobantes fiscales y no fiscales que el producto mostrará por defecto, es decir, cuando no este personalizado en base a los requerimientos de un cliente en particular. Así como también, las definiciones para la emisión de comprobantes cuando el pos opera en "modo entrenamiento".
Dentro del directorio 'default' encontraremos la siguiente estructura de directorios:
Directorio '\bridge\app\config\vouchers\default\templates"
Dentro del directorio templates
, se encuentran los siguientes archivos y directorio:
default.vcl
Estas instrucciones configuran el formato del contenido impreso en los comprobantes
setCharsPerLine 40; setAlignment left;
trainingMode.vcl
Estas instrucciones configuran el formato del comprobante cuando el sistema está en modo de entrenamiento.
Las configuraciones aquí presentes permiten que, cuando el sistema está en modo de entrenamiento, se muestre un mensaje destacado en el comprobante, indicando claramente que las operaciones realizadas son solo para fines de práctica y no deben ser consideradas como transacciones reales.
#parse( "default/templates/defaults.vcl" ) #if( $trainingMode ) newline; newline; setAlignment center; setFontSize high; beginBold; text "*** MODO ENTRENAMIENTO ***"; endBold; setFontSize normal; newline; newline; #end
#if( $trainingMode )
- Descripción: Inicia una condición que verifica si la variable
$trainingMode
está activada. - Propósito: Ejecuta el bloque de código siguiente solo si el sistema está en modo de entrenamiento.
- Descripción: Inicia una condición que verifica si la variable
newline;
- Descripción: Añade una nueva línea.
- Propósito: Separa las diferentes secciones del texto en el comprobante.
setAlignment center;
- Descripción: Establece la alineación del texto al centro.
- Propósito: Centra el texto para mejorar la presentación del mensaje de entrenamiento.
setFontSize high;
- Descripción: Configura el tamaño de la fuente a alto.
- Propósito: Aumenta la visibilidad del mensaje de entrenamiento.
beginBold;
- Descripción: Inicia el texto en negrita.
- Propósito: Resalta el texto especificado a continuación.
text "* MODO ENTRENAMIENTO *";
- Descripción: Imprime el texto "*** MODO ENTRENAMIENTO ***".
- Propósito: Indica claramente que el sistema está en modo de entrenamiento.
endBold;
- Descripción: Finaliza el texto en negrita.
- Propósito: Deja de resaltar el texto.
setFontSize normal;
- Descripción: Configura el tamaño de la fuente a normal.
- Propósito: Establece el tamaño de la fuente estándar para el texto que sigue.
newline;
- Descripción: Añade una nueva línea.
- Propósito: Separa las diferentes secciones del texto en el comprobante.
#end
- Descripción: Finaliza la condición iniciada por
#if
. - Propósito: Cierra el bloque condicional.
- Descripción: Finaliza la condición iniciada por
header.vcl
Estas instrucciones configuran el encabezado del comprobante y permiten reutilizar macros o configuraciones definidas en el archivo trainingMode.vcl
.
#parse( "default/templates/trainingMode.vcl" ) setAlignment center; setFontSize high; beginBold; text "SYNTHESIS R.S."; endBold; setFontSize normal; text "$date $time"; newline; setAlignment left; beginBold; text "Tienda: $ticket.storeCode"; text "Vendedor: $ticket.userName"; text "Terminal/Trx.: $ticket.terminalCode/$ticket.transactionID.transactionNumber"; endBold; newline;
setAlignment center;
- Descripción: Establece la alineación del texto al centro.
- Propósito: Centra el texto para mejorar la presentación del encabezado.
setFontSize high;
- Descripción: Configura el tamaño de la fuente a alto.
- Propósito: Aumenta la visibilidad del texto en el encabezado.
beginBold;
- Descripción: Inicia el texto en negrita.
- Propósito: Resalta el texto especificado a continuación.
text "SYNTHESIS R.S.";
- Descripción: Imprime el texto "SYNTHESIS R.S.".
- Propósito: Muestra el nombre de la empresa en el encabezado del comprobante.
endBold;
- Descripción: Finaliza el texto en negrita.
- Propósito: Deja de resaltar el texto.
setFontSize normal;
- Descripción: Configura el tamaño de la fuente a normal.
- Propósito: Establece el tamaño de la fuente estándar para el texto que sigue.
text "$date $time";
- Descripción: Imprime la fecha y hora actuales.
- Propósito: Proporciona la información de fecha y hora en el encabezado.
newline;
- Descripción: Añade una nueva línea.
- Propósito: Separa las diferentes secciones del texto en el comprobante.
setAlignment left;
- Descripción: Establece la alineación del texto a la izquierda.
- Propósito: Alinea el siguiente bloque de texto a la izquierda.
beginBold;
- Descripción: Inicia el texto en negrita.
- Propósito: Resalta el texto especificado a continuación.
text "Tienda: $ticket.storeCode";
- Descripción: Imprime el código de la tienda.
- Propósito: Muestra el código de la tienda en el encabezado.
text "Vendedor: $ticket.userName";
- Descripción: Imprime el nombre del vendedor.
- Propósito: Muestra el nombre del vendedor en el encabezado.
text "Terminal/Trx.: $ticket.terminalCode/$ticket.transactionID.transactionNumber";
- Descripción: Imprime el código de la terminal y el número de la transacción.
- Propósito: Proporciona información sobre la terminal y la transacción en el encabezado.
endBold;
- Descripción: Finaliza el texto en negrita.
- Propósito: Deja de resaltar el texto.
newline;
- Descripción: Añade una nueva línea.
- Propósito: Separa las diferentes secciones del texto en el comprobante.
sts_logo.jpg
Es la imagen a mostrar cuando se emita un comprobante en modo entrenamiento (se trate de un comprobante físico o por medio de los emuladores configurados para el pos)
El nombre del archivo .jpg de este directorio deberá ser siempre sts_logo.jpg para que sea tomado correctamente.
Imagen por default:
Dimensiones por default:
- 560 x 200
Directorio 'layaway'
También, dentro del directorio 'template' encontraremos el directorio 'layaway' con la definición de las secciones particulares de un comprobante y la siguiente estructura:
Directorios:
Aquí se definirán las estructuras de los siguientes comprobantes para el cliente y para el comprobante testigo de la tienda.
/cancel
- ticket-client.vcl
- ticket-store.vcl
/create
- ticket-client.vcl
- ticket-store.vcl
/payment
lastPayment-client.vcl
lastPayment-store.vcl
payInstallment-client.vcl
payInstallment-store.vcl
/retur
- returnInstallment-client.vcl
- returnInstallment-store.vcl
/status
- ticketStatus.vcl
Archivos .vcl
indican la estructura de cada sección del comprobante.
customer.vcl
discount.vcl
footer.vcl
header.vcl
item.vcl
itemList.vcl
itemsListHeader.vcl
layawayPrinterStatus.vcl
layawayStatus.vcl
partialPayment.vcl
payment.vcl
paymentsChange.vcl
paymentsList.vcl
paymentsListHeader.vcl
perceptions.vcl
returnPayment.vcl
total.vcl
totalDiscounts.vcl
Directorio 'templates'
En este directorio encontraremos los archivos y sub-directorios con el detalle para la regionalización de los comprobantes, tanto para el cliente como para la tienda, las imágenes a imprimir en los comprobantes, las cuales podrán ser reemplazadas por las imágenes que utilice el cliente (respetando siempre el nombre del archivo y sus dimensiones), así como también el detalle para las secciones particulares de un comprobante como ser pago con GiftCard, login. reportes, ordenes, entre otras
Directorios
/adjustment
footer.vcl
header.vcl
newPayment.vcl
originalPayment.vcl
paymentsChange.vcl
paymentsList.vcl
receipt.vcl
receiptEnding.vcl
trxCanceled.vcl
/authorization
- authorizationEntered.vcl
/cashdrawer
- cashdrawerOpen.vcl
/chile
additionalInfo.vcl
cardVouchers_transact.vcl
cardVouchers.vcl
concomitantItem.vcl
concomitantItemsList.vcl
customer.vcl
defaults.vcl
discount.vcl
footer.vcl
giftCard.vcl
giftCardVoucher.vcl
giftCardVouchers.vcl
giftTicket.vcl
header-voucher.vcl
header.vcl
item.vcl
itemsList.vcl
itemsListHeader.vcl
payment.vcl
paymentsChange.vcl
paymentsList.vcl
paymentsListHeader.vcl
perceptions.vcl
shipment_doc.vcl
ticket.vcl
ticketBeginning.vcl
ticketEnding.vcl
total.vcl
totalDiscounts.vcl
trxCanceled.vcl
trxSuspended.vcl
virtualChargeVoucher.vcl
voucher_transact.vcl
voucher.vcl
- /vouchers/templates/chile/shipment/
despatchItem.vcl
despatchNote.vcl
despatchNoteCustomer.vcl
despatchNoteHeader.vcl
despatchNoteItems.vcl
/colombia
cardVouchers_transact.vcl
cardVouchers.vcl
concomitantItem.vcl
concomitantItemsList.vcl
customer.vcl
discount.vcl
footer.vcl
giftCard.vcl
giftCardVoucher.vcl
giftCardVouchers.vcl
giftTicket.vcl
header-voucher.vcl
header.vcl 2.1 kB
item.vcl 3.1 kB
itemsList.vcl
itemsListHeader.vcl
payment.vcl
paymentsChange.vcl
paymentsList.vcl
paymentsListHeader.vcl
perceptions.vcl
shipment_doc.vcl
sts_Logcafam.jpg
ticket.vcl
ticketBeginning.vcl
ticketEnding.vcl
total.vcl
totalDiscounts.vcl
trxCanceled.vcl
trxSuspended.vcl
virtualChargeVoucher.vcl
voucher_transact.vcl
voucher.vcl
- /vouchers/templates/colombia/shipment/
despatchItem.vcl
despatchNote.vcl
despatchNoteCustomer.vcl
despatchNoteHeader.vcl
despatchNoteItems.vcl
UPDATE V7.7
Alerta de Actualización - ClientPOS (Colombia)
Se han implementado ajustes en el sistema para garantizar el cumplimiento de las normativas locales aplicables en Colombia. Estas actualizaciones, disponibles a partir de la versión 7.7, se han centrado en la personalización de los siguientes aspectos del sistema:
Actualización de Facturas y Notas:
- Se ha modificado el texto "Resolución Dian No." en las facturas electrónicas y notas de crédito. El nuevo texto que aparecerá será "AUTORIZACIÓN NUMERACIÓN DE FACTURACIÓN No."
- La dirección de las transacciones reflejará la ubicación exacta de cada tienda, incluyendo el municipio y el país.
Detalles de los Ítems:
- Cada línea de artículo informará la cantidad correspondiente al artículo, junto con su descripción específica y código de identificación.
- Al final de cada ticket, se mostrará el total de ítems vendidos y el importe total en letras.
Impacto en la Visualización del Ticket:
- Estos cambios se aplican al diseño del ticket, que ahora incluirá el nuevo formato mencionado anteriormente, debajo del código QR.
Estas modificaciones aseguran que las transacciones cumplan con los estándares exigidos por las autoridades tributarias de Colombia, en particular la DIAN, en cumplimiento con el Artículo 11 de la Resolución 00165 de 01-11-2023.
/control
#parse( "templates/defaults.vcl" ) ##barcode CODE128 "$barcodeData" 70 2 center below; newline; setAlignment left; beginBold; text "Tienda: $store.code"; text "Operador: $operator"; text "Terminal: $terminal Transacción $transactionId"; #if( $ticket.transactionType == 7 && $ticket.tenderControlReasonDescription ) text "Motivo: $ticket.tenderControlReasonDescription"; #end endBold; newline; #parse( "templates/trainingMode.vcl" ) cutPaper 85;
UPDATE V7.8
En la versión 7.8 de Bridge, se realizó un ajuste en el flujo de operaciones de Retiros dentro de las transacciones de No Venta. A partir de este cambio, se agregó un nuevo campo denominado "Motivo del Retiro" (tenderControlReasonDescription
) en la composición del ticket de venta, el cual permite registrar y visualizar el motivo del retiro directamente en el VCL (Voucher Control Layer) del sistema POS (\bridge\app\config\vouchers\templates\control\footer.vcl).
Ver: Operaciones de NO VENTA, sección RETIRO en el manual de usuario de Bridge POS.
header.vcl
payment.vcl
paymentsList.vcl
paymentsListHeader.vcl
receipt.vcl
receiptEnding.vcl
totals.vcl
trxCanceled.vcl
/coupons
- coupon.vcl
- jumbo.vcl
/device
- deviceNotInitialized.vcl
- monitoringDisabled.vcl
/ecuador
cardVouchers_fiserv.vcl
cardVouchers_transact.vcl
cardVouchers.vcl
concomitantItem.vcl
concomitantItemsList.vcl
customer.vcl
discount.vcl
footer.vcl
giftCard.vcl
giftCardVoucher.vcl
giftCardVouchers.vcl
giftTicket.vcl
header-voucher.vcl
header.vcl
item.vcl
itemsList.vcl
itemsListHeader.vcl
payment.vcl
paymentsChange.vcl
paymentsList.vcl
paymentsListHeader.vcl
perceptions.vcl
prepaidItem.vcl
prepaidItemsList.vcl
prepaidItemsListHeader.vcl
shipment_doc.vcl
ticket.vcl
ticketBeginning.vcl
ticketEnding.vcl
total.vcl
totalDiscounts.vcl
trxCanceled.vcl
trxSuspended.vcl
virtualChargeVoucher.vcl
voucher_fiserv.vcl
voucher_transact.vcl
voucher.vcl
- /vouchers/templates/ecuador/shipment/
despatchItem.vcl
despatchNote.vcl
despatchNoteCustomer.vcl
despatchNoteHeader.vcl
despatchNoteItems.vcl
/error
- errorOccurred.vcl
/fidelityCard
fidelityPoints.vcl
giftCardRecharge.vcl
header.vcl
loyaltyPointsPayment.vcl
/franking
- franking.vcl
/honduras
cardVouchers_transact.vcl
cardVouchers.vcl
concomitantItem.vcl
concomitantItemsList.vcl
customer.vcl
defaults.vcl
discount.vcl
footer.vcl
giftCard.vcl
giftCardVoucher.vcl
giftCardVouchers.vcl
giftTicket.vcl
header-voucher.vcl
header.vcl
item.vcl
itemsList.vcl
itemsListHeader.vcl
payment.vcl
paymentsChange.vcl
paymentsList.vcl
paymentsListHeader.vcl
perceptions.vcl
pinturas.png
shipment_doc.vcl
sts_Logcafam.jpg
ticket.vcl
ticketBeginning.vcl
ticketEnding.vcl
total.vcl
totalDiscounts.vcl
trxCanceled.vcl
trxSuspended.vcl
virtualChargeVoucher.vcl
voucher_transact.vcl
voucher.vcl
- /vouchers/templates/honduras/shipment/
despatchItem.vcl
despatchNote.vcl
despatchNoteCustomer.vcl
despatchNoteHeader.vcl
despatchNoteItems.vcl
/izipay
printBatchClosureIzipay.vcl
printDetailedReportIzipay.vcl
printDetailedReportIzipaySelection.vcl
/login
balance.vcl
header.vcl
/monederogiftcard
balance.vcl
header.vcl
/orders
footer.vcl
header.vcl
order.vcl
trxCanceled.vcl
- /vouchers/templates/orders/withNotes/
customer.vcl
footer.vcl
header.vcl
item.vcl
items.vcl
orderWithNotes.vcl
/paymentsOnAccount
customer.vcl
footer.vcl
header.vcl
item.vcl
itemsList.vcl
payment.vcl
paymentOnAccount.vcl
paymentsChange.vcl
paymentsList.vcl
paymentsListHeader.vcl
total.vcl
/peru
cardVouchers_fiserv.vcl
cardVouchers_transact.vcl
cardVouchers.vcl
concomitantItem.vcl
concomitantItemsList.vcl
customer.vcl
discount.vcl
footer.vcl
giftCard.vcl
giftCardVoucher.vcl
giftCardVouchers.vcl
giftTicket.vcl
header_Turno.vcl
header-voucher.vcl
header.vcl
item.vcl
itemsList.vcl
itemsListHeader.vcl
payment.vcl
paymentsChange.vcl
paymentsList.vcl
paymentsListHeader.vcl
perceptions.vcl
prepaidItem.vcl
prepaidItemsList.vcl
prepaidItemsListHeader.vcl
reprintVoucherIzipay.vcl
shipment_doc.vcl
ticket.vcl
ticketBeginning.vcl
ticketEnding.vcl
total.vcl
totalDiscounts.vcl
trxCanceled.vcl
trxSuspended.vcl
virtualChargeVoucher.vcl
voucher_fiserv.vcl
voucher_transact.vcl
voucher.vcl
voucherIzipay.vcl
- /vouchers/templates/peru/shipment/
despatchItem.vcl
despatchNote.vcl
despatchNoteCustomer.vcl
despatchNoteHeader.vcl
despatchNoteItems.vcl
/report
- /vouchers/templates/report/receivedPayments/
footer.vcl
header.vcl
receipt.vcl
receivedPaymentsList.vcl
receivedPaymentsListHeader.vcl
- /vouchers/templates/report/witnessReport/
footer.vcl
header.vcl
salesByTender.vcl
witnessReport.vcl
witnessReportSalesByCash.vcl
witnessReportTip.vcl
/sales
cardVouchers_fiserv.vcl
cardVouchers_transact.vcl
cardVouchers.vcl
concomitantItem.vcl
concomitantItemsList.vcl
customer.vcl
discount.vcl
footer.vcl
giftCard.vcl
giftCardVoucher.vcl
giftCardVouchers.vcl
giftTicket.vcl
header-voucher.vcl
header.vcl
item.vcl
itemsList.vcl
itemsListHeader.vcl
payment.vcl
paymentsChange.vcl
paymentsList.vcl
paymentsListHeader.vcl
perceptions.vcl
prepaidItem.vcl
prepaidItemsList.vcl
prepaidItemsListHeader.vcl
reprintVoucherIzipay.vcl
shipment_doc.vcl
ticket.vcl
ticketBeginning.vcl
ticketEnding.vcl
total.vcl
totalDiscounts.vcl
trxCanceled.vcl
trxSuspended.vcl
virtualChargeVoucher.vcl
voucher_fiserv.vcl
voucher_transact.vcl
voucher.vcl
voucherIzipay.vcl
- /vouchers/templates/sales/shipment/
despatchItem.vcl
despatchNote.vcl
despatchNoteCustomer.vcl
despatchNoteFooter.vcl
despatchNoteHeader.vcl
despatchNoteItems.vcl
UPDATE 7.9
A partir de la versión 7.9 de Bridge, se incorporaron funcionalidades relacionadas con la generación de Códigos de Barras para Transacciones Suspendidas y Devoluciones. Estos cambios incluyen:
Formato del Código de Barras:
- Tipo: CODE93 y CODE128.
- Campos:
- Tienda: Identificador único de la tienda (ejemplo:
y001
). - Terminal: Identificador único de la terminal (ejemplo:
002
). - Número de Transacción: Identificador único de la transacción (ejemplo:
000267
). - Código de Verificación: Un carácter para validar la lectura del código.
- Tienda: Identificador único de la tienda (ejemplo:
Rutas de Configuración:
- Para devoluciones:
/bridge/app/config/vouchers/templates/sales/footer.vcl
. - Para transacciones suspendidas:
/bridge/app/config/vouchers/templates/sales/trxSuspended.vcl
.
- Para devoluciones:
Nuevas Líneas de Configuración en el VCL:
Estas líneas fueron añadidas para soportar la impresión de los códigos de barras:barcode CODE93 "$barcodeData" 70 200 center below;
barcode CODE128 "$barcodeData" 70 2 center below;
Estos cambios están diseñados para agilizar procesos como devoluciones y recuperación de transacciones suspendidas, mejorando la experiencia del usuario y la eficiencia operativa en el punto de venta.
/simpleText
- textLines.vcl
/trainingMode
- header.vcl
- receipt.vcl
/uruware
agendas.vcl
analisisDeIVA.vcl
concomitantItem.vcl
concomitantItemsList.vcl
customer.vcl
discount.vcl
footer.vcl
giftCard.vcl
giftTicket.vcl
header.vcl
item.vcl
itemsList.vcl
itemsListHeader.vcl
monederoGiftCardVouchers.vcl
monederoGiftVoucher.vcl
nroticket.vcl
payment.vcl
paymentsChange.vcl
paymentsList.vcl
paymentsListHeader.vcl
perceptions.vcl
ticket.vcl
ticketBeginning.vcl
ticketEnding.vcl
total.vcl
totalDiscounts.vcl
trxCanceled.vcl
trxSuspended.vcl
- /vouchers/templates/uruware/shipment/
despatchItem.vcl
despatchNote.vcl
despatchNoteCustomer.vcl
despatchNoteHeader.vcl
despatchNoteItems.vcl
/warranties
customer.vcl
footer.vcl
header.vcl
sts_logo.jpg
ticket.vcl
warranty.vcl
Archivos .vcl
defaults.vcl
header.vcl
trainingMode.vcl
Archivo de imagen .jpg
- sts_logo.jpg
velocimacros.vm
El archivo velocimacros.vm
es una biblioteca de macros de Velocity que proporciona funcionalidades comunes para el formateo y manipulación de datos en los comprobantes fiscales y no fiscales. Son herramientas que facilitan la personalización y formateo de los comprobantes emitidos por el POS, garantizando que la información se presenta de manera clara y coherente.
A continuación, se describen las macros definidas en este archivo y su propósito:
Formato de Cadenas (fmt
)
#macro (fmt $pattern $value) $FormatUtils.escapeQuotes($FormatUtils.format($pattern, $value))#end
Esta macro formatea una cadena según un patrón específico y escapa las comillas en el resultado.
Formato de Fechas (dateFmt
)
#macro (dateFmt $pattern $value) $FormatUtils.formatDate($pattern, $value)#end
Esta macro formatea una fecha según el patrón proporcionado.
Truncar Texto (trunk
)
#macro (trunk $text $lenght) $FormatUtils.trunk($text, $lenght)#end
Esta macro trunca un texto a la longitud especificada.
Ruta Absoluta (absPath
)
#macro (absPath $relativePath) $FormatUtils.getAbsolutePath($relativePath)#end
Esta macro convierte una ruta relativa en una ruta absoluta.
Comandos de Texto VCL (vclTexts
)
#macro (vclTexts $text) $FormatUtils.parseIntoTextCommands($text)#end
Esta macro analiza un texto en comandos de texto VCL.
Formato de Múltiples Líneas (fmtMultiline
)
#macro (fmtMultiline $pattern $value) $FormatUtils.formatMultiline($pattern, $value)#end
Esta macro formatea un valor en múltiples líneas según el patrón especificado.
Ejemplo para cambiar el Logo a imprimir en el comprobante de venta.
Podrá realizarse la personalización de los comprobantes emitidos en el punto de ventas, por ejemplo, para el cambio del logo que se muestra al momento de emitir un comprobante de ventas.
Para ello, en el directorio \bridge\app\config\vouchers\templates encontraremos la imagen que el POS trae por defecto, bajo el nombre sts_logo.jpg.
Teniendo la imagen de la marca del cliente en formato .jpg, le cambiaremos el nombre, colocando el mismo nombre que trae el logo del producto base (sts.logo.jpg) y reemplazaremos en el directorio \bridge\app\config\vouchers\templates el archivo existente con el mismo nombre.
Luego podremos reiniciar el pos, y al momento de cerrar una venta podremos observar el nuevo logo del cliente en el comprobante de ventas.
- Sem rótulos