Differences in local and server-side data

We have deployed a time tracking and invoicing system for consultants that work on projects for our company. 99.9% of the time, it works great as-is but there is an issue that I am trying to understand and resolve.

For context - users create time (or expense) entries. They can edit those entries at any time up until they create an invoice that contains those entries and submit it to us for approval and payment.

To accomplish this, the app has an Entries table and an Invoices table. When the user is ready to create an invoice, they enter the appropriate screen and Add the entries they want to their invoice. Add is an action that uses Set column values to populate the invoice number, a TRUE boolean, and the current date in columns on the entry. Then when they finalize the invoice, a new row in the Invoices table is generated with a matching number.

Once invoiced, they’re prevented from editing the entries based on conditional UI elements that look at that TRUE boolean on the entry.

A Relation column links to the individual entries which allows them (and us) to view the invoice. Downstream, we can then review, approve and sync that invoice over to our accounting system for payment.

The issue that we’ve seen a couple of times is that users invoices shown on their machines do not match invoices on our side and what ultimately makes it into our accounting system. They’re able to produce screenshots of what they see so we can corroborate.

The individual entries are always preserved but in some cases the invoice number, boolean and date have not populated for a particular entry, causing it to appear as uninvoiced on our end while on their side it shows correctly invoiced.

The app’s data source is a Google Sheet.

My hypothesis is that this is some kind of caching / sync issue between their local copy of the app and the server.

The question is - is there a better way I can implement this functionality within our app to prevent this from happening?

It’s weird if a set column value action causes problems, but I would try testing the same logic on a Glide Table to see if it helps.

1 Like

Native glide table was going to be my next step. Unfortunately we have a few other things connected to the Google Sheet that I’ll have to move over. It’s also been such a transient issue it will be hard to know if it’s solved.

Ultimately we are probably going to end up using SQL backend for this app - I am wondering if that will make this problem better, worse or the same…

1 Like