Menu

ERP Platform_Be truly agile

For Openbravo Product Development Team, performance has been (and it continues being) one of our most important focus during the last months.

Performance is a broad topic and we have been working hard to improve it across different areas. This post highlights the most relevant projects to improve performance we have been delivering during the last year, being each of them by itself a good reason to update Openbravo ERP Platform to its latest release.

Continue Reading →

Categories: English, ERP Tech Updates | Tags: | Leave a comment

Commerce_Be future StoreWithout doubt we can say we are in the consumer age. Empowered consumers armed with multiple devices visit stores much more informed than ever, expecting to receive a personalized service. This is clearly disrupting retail and controlling brands.

The role of physical stores in the cross-channel era has been widely discussed  by retail experts. Physical stores remain the center piece of the traditional retail business, still having about 80% of total revenues as several industry studies reveal (1). Although their contribution to total revenues is expected to decrease in the next 3 years and beyond, the stores will remain the main driver of revenue and may in fact be a strong differentiator versus pure online retailers. Moreover, stores will have an integral role in influencing sales in other channels. Customers still spend most of their time shopping in stores and spend more money in them.

However, their role has changed and to play it the stores must be equipped with adequate systems that deliver unique shopping experiences. As a result most retailers are now struggling to adapt to this new reality and are asking themselves: How to prepare the physical stores for the new role?

Openbravo for Commerce solution provides a state-of-the-art flexible web and mobile POS. It is the best solution for retailers that want to succeed in today’s consumer age enabling them to “Be the future store” by:

Adopting a flexible and mobile web point of sale platform

  • Open new stores much faster
  • Start processing sales on new terminals in a matter of minutes
  • Adapt and integrate your solution with other systems, easily
  • Lower your hardware costs by using mainstream devices

Providing an enjoyable customer service

  • Offer interactive customer assistance everywhere in the store
  • Search for products based on customer preferences faster
  • Increase cross-selling thanks to real-time information on promotions and products
  • Increase sales probability from real-time cross-store stock checks

Optimizing store operations

  • Secure effective operational control with manager approvals and user permissions
  • Be in control of goods at all times, movements with mobile warehouse solutions
  • Have real-time visibility of cash in each terminal, stock on-hand and pending receipt
  • Achieve higher performance control with a store profit and loss report

“Be the future store, now!” and provide an enjoyable customer experience in  physical stores. Learn how the Openbravo Commerce Platform can help your business.

(1) Source. AT Kearney. Future of stores study. 2013

 

 

Categories: English, Industry Trends, Retail, Retail General Updates | Leave a comment

Special

 

Organizations today face new markets, new competition and  ever-increasing customer expectations. To be competitive you need to “Be differentiated” and here is where choosing the right ERP comes in, as it’s key because it will help you  “Be differentiated” both because of your ERP and in the way that you use it.

The Openbravo ERP Platform offers an unmatched combination of an easily extendible development platform with an embedded horizontal ERP functionality.

 

 

The benefits for any business organization upon implementing the Openbravo ERP Platform are huge but especially in helping organizations to “differentiate themselves” we can summarize them as follows:

Adapt for higher competitiveness

Did you know that 70% of firms decide to build from scratch to get the required functionality that no software vendor provides (1)

The Openbravo ERP Platform features a flexible architecture that allows you to adapt the solution to your key business requirements that differentiate you from competitors while keeping full control thanks to Openbravo’s Open Source nature.

  • Leverage broad available functionality that can be easily extended
  • Gain absolute control of customizations thanks to a modular architecture
  • Extend your system by easily integrating with other systems
  • Scale to any stage of growth

Achieve higher staff productivity

User experience is at the center of ERPs revolution. Openbravo breaks the rigidity of traditional ERPs with a powerful and highly productive web user interface that brings desktop level productivity to your browser.

  • Make data entry faster with multitasking and the editable grid
  • Improve team work with collaboration tools like notes, attachments and direct links to documents
  • Enable users to adapt the user interface to their needs without technical assistance
  • Reduce manual work and errors with daily tasks automation 

Develop unique business relationships 

Differentiation is also provided in the way a company interacts with its ecosystem.

  • Share access with trusted partners or customers thanks to being a web-based solution
  • Allow staff to access the system wherever they are
  • Achieve higher operational efficiency by easily integrating with your customers’ or partners’ systems
  • Share valuable data with your partners and customers thanks to powerful analytics

 

With Openbravo you get a highly productive user interface and endless flexibility to really let you be differentiated.

Stand out from the crowd with your ERP! Learn how the Openbravo ERP Platform can help your business.

(1) Source. Forrester. Global, Industry, And Technology Forces Shape The ERP Landscape. 2013

 

Categories: Other | Leave a comment

Openbravo Product Roadmap

This is a very exciting time for Openbravo. We are off to a fantastic start of 2014 and are thrilled about all the great things going on in and around Openbravo.

Currently we are rolling out our updated product vision and roadmap for the coming years in and beyond our ecosystem. Similarly we have started to communicate our new and improved value proposition and resulting product and services offer.

Our ambition is to continuously bring solutions to the market that are better and better, and enable our clients to address more effectively than ever the business challenges they are facing on a daily basis in today’s dynamic markets. So we invite you to check out some of our latest resources we briefly comment on below.

We’ve updated our website to present the two main components of our improved offer:

Both built on top of a flexible and easily extendible development platform that is web, mobile and cloud-ready.

We’ve published a new Roadmap document that reflects our updated product vision. It comes with a new release policy that includes a new update of the Roadmap on a quarterly basis. At that moment we will publish a new version of the Roadmap document. In practice this means that the remaining updates for 2014 will be shared with everyone in April, July and October.

Don’t hesitate  to check some of the roadmap features, a lot of them already available in June such as, for example:

  • Terminals and Stores Opening and Closing that extends our current support to daily store operations with a higher control of the status and information of the store and all its terminals
  • Combos and Best Deal Case that extend our promotions and discounts engine with additional discount options. The Combos feature extends our current packs functionality with new capabilities that will make it perfect for retail subsectors such as fast food restaurants and others. The Best Deal Case will help to improve retailers’ customer loyalty by applying the best offer available.
  • Training mode on web POS that will help to train store staff more efficiently and to start ringing in sales even faster

 

Openbravo Embedded Analytics Engine

Openbravo Embedded Analytics Engine

 

And many other features that will be released both for the Commerce and ERP Platform components. We will provide more detail about some of them in the coming blog posts.

We encourage you to visit these latest information resources and use our social channels to share  your thoughts with us on what we are doing and how you think we can make Openbravo solutions even better!

Categories: By solution, Company News, English, ERP General Updates, Retail General Updates | Leave a comment

Flexibility, adaptability, modularity and much more… Recent months have brought many new features to Openbravo for Retail solution with functional and technical improvements in many areas, for Merchandising and Store Managers and IT departments. Here you have a summary:

For Merchandising Managers: Improved customer centric capabilities

Scalable Pricing Scalable Pricing 2

Scalable Pricing

For Store Managers: Improved store operations

Verified Return_step 1

Verified Return_step 2

Verified Return_step 3

Verified Returns

Manually open cash drawer

Manually Open Cash Drawer       Discount selector with numerical pad

Discount selector from numerical pad

 

Denominations in cash up_1

Denominations in cash up_2

Use of denominations in Cash-up

  • Gain higher control over your daily store operations with the possibility to force a cash-up approval request when the system detects a difference between the actual and expected cash amounts during a cash-up process.

Cash Up Approval

 

Cash up approval request

For IT department: Improved retail technology platform

 

Learn how Openbravo for Retail, the flexible commerce solution for agile retailers, can help your business.

Categories: English, Other, Retail, Retail General Updates, Retail Tech Updates | Leave a comment

In this post we will talk about on of the improvements included in Openbravo web POS – RMP26 called Client Side Hooks which allow developers to extend the Openbravo Web POS solution in a modular and an easy maintainable way.

What are Client Side Hooks?

Client Side Hooks provide an easy mechanism to extend functionality with external modules. It basically consists on a lightweight way to include dependencies from third party modules.

Hooks are created in some specifics points of Openbravo web POS (here you can find information about the available hooks) and the modules just need to register into this hook to take advantage of it.

The image shows How Openbravo Web POS Hooks work.

Some useful examples

  • My module must prevent products from being added to the order when their price is lower than 1€.

    • This hook (OBPOS_PreAddProductToOrder) will solve your problem because on it you will receive the product which is being added and you can cancel this add operation using a specific parameter.

  • When a ticket is deleted (without having been completed yet) I want to save this event information in the backend.

    • This hook (OBPOS_PreDeleteCurrentOrder) will solve your problem. You can execute an asynchronous call to the backend with some details of the deleted order.

  • Based on the final amount of the ticket, I want to mark the order with an specific category.

    • This hook (OBPOS_PreDeleteCurrentOrder) will allow you to analyze the order details and save some specific data into it. This information will be sent later to the backend, where the order loading process will automatically save it.

Do you need a new Hook?

Usually developers will use those hooks that are included in Openbravo Web POS, but in some circumstances a developer may require new ones to develop an specific functionality. In this case, we recommend the developer to add by itself the hook and then develop the solution based on it. Also, he should communicate to Openbravo support team that this hook is needed. The team will evaluate the hook and if they think it make sense, it will be properly documented and included in the next RMP.  Following this process, the new development will run without patches once the hook is published.

How to register a function into a Hook?

The code below shows the way to register a function into a specific hook. This function will be executed when the flow of the main program reaches the hook. At this moment, hooks mechanism will call sequentially to each registered function. Once the callback is performed by the last executed function, the flow will continue taking into account the new values of the arguments.

1
2
3
4
5
6
OB.MobileApp.model.hookManager.registerHook('BASMOD_HookName', function (args, callbacks) { 
  // execute all your logic here // If your code generates any kind of asynchrony, remember to execute 
  // callbackExecutor when the response is received. 
  // This is a MUST to properly manage callbacks 
  OB.MobileApp.model.hookManager.callbackExecutor(args, callbacks); 
});

Producing different behaviors on the original program flow

Parameters received by functions registered in a specified hook can be modified by the hook. This can be used, as an example, to add information to the current order. Moreover, by including a specific property into the arguments (returned later through callbackexecutor) we can change the behavior of the main flow (i.e. Cancel the addition of a product to the ticket). This should be well documented for every hook.

How to manage asynchrony in a Hook?

Hooks allow developers to register functions which contains asynchronous calls, but in these cases each function must indicate to the hook that all the asynchronous tasks are finished (calling to callbackexecutor), this means that each function is responsible to manage the asynchrony that it generates.

A Client Side Hooks example

To end this post I will show you an example. I’m going to check the stock of the product which is being added to the ticket calling to backend. If the backend response says that the stock is not enough I will show an error and the product will not be added to the ticket.

(Note:  If you are interested in this functionality, a module is available for Openbravo Web POS, called Stock Validation)

Step 1 – Create a module dependant on Openbravo Web POS with a JS file

We will skip this part because this is not the purpose of this post. However,  here you can check how to create a module which adds a js file to Openbravo Web POS.

Step 2 – Create a json process simple

This process will check if the product is available. In this example, the servlet always will answer false (not enough stock);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package org.openbravo.retail.samplemodule;
 
 
import javax.servlet.ServletException;
import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;
import org.openbravo.retail.posterminal.JSONProcessSimple;
 
public class StockChecker extends JSONProcessSimple {
 
@Override
 
public JSONObject exec(JSONObject jsonData) throws JSONException, ServletException {
  // here we should check the stock
  JSONObject preFinalResult = new JSONObject();
  preFinalResult.put("allowSell", false);
  JSONObject finalResult = new JSONObject();
  finalResult.put("data", preFinalResult);
  finalResult.put("status", 0);
  return finalResult;
}
 
}

Step 3 – Register our function in the selected hook (OBPOS_PreAddProductToOrder)

In this example our function introduces an asynchronous operation (call to server to check the stock). So we will call to executeCallback in the callback of the asynchronous operation.

To let  the system know that we want to cancel the operation, we will add a property to the arguments (cancelOperation). The way we know it is because it’s explained in the documentation of this hook.

Finally, to demonstrate how we can modify values of the received parameters, we will add a ‘X’ to the product name to warn us about the stock check was not done.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
OB.MobileApp.model.hookManager.registerHook('OBPOS_PreAddProductToOrder', function (args, c) {
 
//create a function to call to the server
function executeCallToServer() {
 
  var serverCall = new OB.DS.Process('org.openbravo.retail.samplemodule.StockChecker');
 
  OB.UTIL.showLoading(true);
 
  serverCall.exec({
    orderLine: args.productToAdd,
    qtyToAdd: args.qtyToAdd
  }, function (data, message) {
    OB.UTIL.showLoading(false);
    if (data.allowSell === false) {
      //Cancel the operation. The product will not be added;
      args.cancelOperation = true;
      OB.UTIL.showConfirmation.display('Product is not available', 'The stock of this product is not enough.');
    }
    OB.MobileApp.model.hookManager.callbackExecutor(args, c);
  }, function (error) {
    OB.UTIL.showLoading(false);
    console.log('An error happened while checking stock');
   //Here also we are able to change the name of the product
    args.productToAdd.set('_identifier', args.productToAdd.get('_identifier') + ' - X');
    //add the product normally
    OB.MobileApp.model.hookManager.callbackExecutor(args, c);
  });
 
}
 
//call to function
console.log('Hook executed', args);
executeCallToServer();
});

Here you can find a .zip which contains the module of this example

Final result

In this video you can see how this example works.

Useful links

Categories: English, Retail, Retail Tech Updates | Leave a comment

Flexibility, adaptability, modularity and much more…Recent months have brought many new features to Openbravo 3 with improvements in Master Data, Sales and Finance Management as well as Usability and Platform areas. Here you have a summary:

Master Data Management

  • New capability to add attributes to the product to extend its definition and define different prices for each combination, such as size or color.

Manage Variants

Manage Product Variants

Organization Chart Tree

Characteristics Tree

  • New Product Catalogs module that extends the capability to categorize products in tree structures.

Product Catalog

Drag&Drop Product Catalog

 

Sales Management

Freight Management

Freight Management

Finance Management

Invoice Payment Report

Invoice Payment Report

 Usability and Platform

Learn how Openbravo 3, the smart enterprise solution can help your business.

Categories: English, ERP General Updates, ERP Tech Updates | Leave a comment

Electronic invoicing

La facturación ha sido históricamente un proceso engorroso y manual para las empresas, pero al mismo tiempo muy importante: una facturación ineficiente conduce a pérdidas de ingresos, flujos de caja insuficientes y, en última instancia, a la insatisfacción de los clientes. Hoy en día, la presión de los sectores público y privado está convirtiendo la facturación tradicional de carácter manual en algo obsoleto.

Una creciente mayoría de empresas y de gobiernos están reclamando la facturación electrónica a fin de reducir errores de facturación, mejorar la rentabilidad y cumplir fehacientemente con las normas tributarias.

México no es la excepción. A partir del primero de enero del 2014 y como resultado de la reciente Reforma Fiscal, todos los contribuyentes, sin importar la cuantía de sus ingresos, tipo de actividad o régimen fiscal, deberán sumarse a la factura electrónica bajo el esquema Comprobantes Fiscales Digitales (CFDI), por lo que las facturas y recibos impresos con código de barras ya no serán válidos.

El Servicio de Administración Tributaria (SAT) destaca que, si su empresa emite factura electrónica desde antes del 2011 (CFD), tampoco serán válidas, por lo que es urgente la actualización.

De acuerdo al SAT, la Factura Electrónica está transformando la manera de hacer negocios en México, pues los contribuyentes que ya la han implementado, observan beneficios en factores como seguridad, disminución de costes, optimización de controles internos, impulso de mejores procesos tecnológicos y cambio de prácticas. Desde el 2005 a junio de 2013, más de 830.000 contribuyentes han optado por el esquema de facturación electrónica.[i]

Beneficios de la Factura Electrónica

Cuando un negocio crece, el éxito que acompaña exige que los procesos de back-office como facturación, sean gestionados y supervisados formalmente. Así, una facturación basada en hojas de cálculo, archivos de texto y paquetes de contabilidad como Quickbooks o Contaplus se ha convertido en un proceso relativamente sencillo y estandarizado, aunque resulte aún una actividad manual y costosa en términos de tiempo. Sin embargo, lo que ayer fue aceptable para la facturación resultará insuficiente mañana.

Además de permitir la agilidad del negocio mediante la eliminación de los gastos operativos de la facturación manual, la facturación electrónica ofrece una serie de ventajas significativas sobre los procesos manuales, incluyendo:

  • Facturación más rápida – El uso de un sistema ERP para su facturación elimina la necesidad de emitir facturas en papel, porque su proceso es enteramente digital. En particular, las facturas almacenadas en un sistema automatizado puede ser enviadas electrónicamente en cuestión de segundos, lo que se traduce en una rápida liquidación de cuentas y una mejor posición de caja para su negocio.
  • Facturación precisa – El proceso de facturación parcial o totalmente automatizado por un sistema ERP disminuye significativamente la probabilidad de error que puede incidir negativamente en la información financiera desde una óptica tributaria o de satisfacción del cliente.
  • Informes tributarios y financieros – El procesamiento coherente y digital de la facturación le ayuda a optimizar la producción de informes financieros y simplifica la auditoría para las declaraciones tributarias.
  • Acceso a las grandes operaciones públicas / privadas – Cerrar acuerdos con la mayoría de gobiernos y empresas requiere adoptar un sistema de facturación electrónica. En consecuencia, si su empresa no dispone de la capacidad de enviar facturas electrónicamente, no podrá competir en algunas de las mayores y más jugosas oportunidades de negocio.

Descripción de la Factura Electrónica

Para obtener los beneficios anteriores, un sistema de facturación electrónica debería incrementar el nivel de eficiencia de su empresa mediante la automatización completa de los procesos.

De forma general, una factura electrónica es una factura que se pueden generar, visualizar y enviar a sus socios o clientes electrónicamente, como un archivo digital. Una factura electrónica se considera equivalente a una factura generada por sus procesos actuales cuando cumple requisitos específicos siguientes:

  • La factura se halla en formato electrónico, tal como XML o HTML
  • La factura se envía y recibe electrónicamente
  • La factura incluye una firma digital que garantiza la integridad de su contenido y autentifica su origen
  • La factura incluye un sellado de tiempo para asegurar la fecha y hora de emisión

Facturación Electrónica Modular con Openbravo

Si bien este proceso general está relativamente estandarizado a nivel funcional,  proporcionar una cobertura apropiada para el mismo, representa un reto considerable para muchos proveedores de software ERP. Ello es debido principalmente a la gran cantidad de formatos electrónicos y plataformas de facturación en uso en todo el mundo. Así, mientras la adaptación a los diferentes estándares resulta una tarea compleja para un sistema ERP tradicional con una arquitectura monolítica, la arquitectura modular de Openbravo está diseñada para asumir esta variabilidad de forma natural y sencilla mediante simples módulos de extensión.

Estos módulos están formalmente empaquetados ​​y agrupados en los Paquetes Profesionales de Localización (Professional Localization Pack) para cada país, para facilitar la adaptación y la instalación en su ERP. A modo de ejemplo, Openbravo dispone del Paquete de Localización Profesional para España y para México,  conteniendo una gran cantidad de funcionalidades específicas de cada país (incluyendo los módulos de facturación electrónica) y contando con un asistente de instalación para facilitar su implantación.

La facturación electrónica extensible es sólo un ejemplo de cómo la arquitectura modular de Openbravo ofrece a las empresas la agilidad necesaria para extender fácilmente la funcionalidad de su ERP.

Para gozar de todos los beneficios que la facturación electrónica ofrece, como el acceso a grandes operaciones público-privadas, es necesario contar con un ERP que se adapte a las necesidades particulares de cada empresa, propias del tamaño y nivel de ingresos. Gobiernos de diferentes países están ejerciendo una presión directa y clara para que la facturación tradicional sea abandonada. El próximo primero de enero es la fecha límite en México y no se debe pasar por alto la importancia de este cambio y la planificación de los procesos requeridos.

Para más información acerca de cómo Openbravo ERP, la solución ágil y flexible, puede ayudar a su empresa a cumplir con los requisitos de su negocio y legales, visite www.openbravo.com


[i] Con información de Notimex, Julio 2013.

Categories: ERP General Updates, Industry Trends, Other, Spanish | Leave a comment

banner-sepa

We are living in a very interesting time for the evolution of different businesses all across the European Union and SEPA is a good example. SEPA (Single Euro Payments Area, for its acronym in English) is an initiative of the banking industry, aided by the European Commission and the European System of Central Banks, whose primary objective is to build a Single Financial Area.

SEPA ‘s implementation corresponds to the need of an electronic payment system that complements the project of the Economic Monetary Union after the introduction of the euro as the single currency. This initiative will allow individuals, companies, government and other agents make their electronic banking transactions in euros, national and international, with the same basic conditions, rights and obligations regardless of the geographical location where they are.

Building a “single financial space” will overcome local conditions barriers, often divergent between countries: technical, commercial and legal conditions may be unified through this system for electronic payments.

The implementation of SEPA introduces the following instruments: individual or mass transfer payments, direct debits or standing orders, which includes, punctual and periodical payments, presentation and compensation cycles, and a framework for electronic payment cards, which customers can use to withdraw cash throughout the SEPA area.

Guidelines, deadlines and actors

 As an initiative of the European Commission, SEPA includes the following countries:

  • Those who are part of the European Union and the Euro currency handling
  • Members of the European Union, with a currency other than Euro, such as Bulgaria, Croatia, Hungary, Czech Republic, Sweden and the UK, among others
  • Some countries that are not part of the European Union, Iceland, Norway, Liechtenstein, Switzerland and Monaco

This project has a wide scope, which will contribute to the standardization of cross-borders and streamlining of procedures and payments.

On February 1 2014, is the deadline date for countries in the Euro zone to complete the migration to SEPA instruments platforms. However, the deadline is extended until October 31, 2016 to countries outside the Euro zone.

Some experts say that not anticipating this migration and making changes at the last minute may bring several risks, such as additional costs for non-payment and security issues. We must not forget that after the deadline, local payment formats for transfer, and direct debit payments will no longer be valid.

Benefit yourself and plan the change

Migration is definitely an investment in terms of time and human resources, so it is important to provide the necessary importance to SEPA’s action plan and to work together with the different company’s areas, such as: sales, marketing, legal, finance and human resources, cause they play an important role by modifying contracts, payrolls, reports, and so on.

Remember that it is not just about making a change in IT and the software already used to one that is compatible with the SEPA tools, the entire system switches when the business changes, that’s why we must seek to motivate the transition between our suppliers, creditors, investors, employees and customers, to achieve a successful migration and ensure the growth and sustainability of our collaboration with these different agents.

Once we are part of this new system, we can access new forms of euro payments in a cheaper and easier way, also simplifies the settlement process, improving cash flow and reducing costs. All this through a single bank account.

The European corporate SEPA project represents a great opportunity for process´s standardization, business technology and functional normalization, as well as for innovation and development. These factors can be the first step towards the internationalization of business and export development of the company.

SEPA is an opportunity, specially for small and medium enterprises, to expand its network of suppliers and creditors, with the possibility of finding payment services offers with more competitive prices but above all to offer their products and services through national borders and throughout the European Union, resulting in an expansion into new markets.

An essential element to consider is the transition of whole company’s management systems into SEPA’s project, so that all departments involved have a solution that is compatible with this project.

SEPA compliance business management solution, will be essential to bring the best of this change, but above all, to assist in the company’s actions through national boundaries and it’s market expansion.

Openbravo guarantees that all its customers will comply with this new regulation. To learn more about how Openbravo ERP business management solution can help you, please click here.

 

 

 

 

Categories: English, Industry Trends, Other | Leave a comment

Flexibility, adaptability, modularity and much more… Recent months have brought many new features to Openbravo for Retail solution with functional and technical improvements in many areas. Here you have a summary:

Merchandise Management

Variants and product characteristics filterings (Brand, Color, Size in this example)  using POS with an iPad

Variants and product characteristics filterings (Brand, Color, Size in this example) using POS with an iPad

  • Approvable discounts. Manual discounts can be set to require a manager authorization hence improving your security policies.

Approval required for an applied discount

Approval required for an applied discount

Example of a catalog structure

Example of a catalog structure

Customer Management

 

Tendering

 

POS Adaptability

Improvement of current features now supported by more powerful modularity tools to provide endless flexibility to adapt the solution to your specific business requirements:

Learn how Openbravo for Retail business solution can help your business.

Categories: English, Other, Retail, Retail General Updates, Retail Tech Updates | Leave a comment

← Older posts