45 lines
1.8 KiB
ReStructuredText
45 lines
1.8 KiB
ReStructuredText
|
|
||
|
Merging
|
||
|
=======
|
||
|
|
||
|
Rattail ostensibly supports merging any 2 records, of any kind. But
|
||
|
the devil is always in the details...
|
||
|
|
||
|
In most cases a merge involves:
|
||
|
|
||
|
* inspect differences between 2 records
|
||
|
* choose which one to "keep" vs. "remove"
|
||
|
* perform the merge, which:
|
||
|
|
||
|
* may *update* the "keep" record, with certain data from the "remove" record
|
||
|
* then *deletes* the "remove" record
|
||
|
|
||
|
For some things this can be pretty straightforward, for instance if
|
||
|
your User records are maintained only in Rattail and aren't imported
|
||
|
from elsewhere, then a merge of 2 User records could by definition
|
||
|
only affect Rattail anyway.
|
||
|
|
||
|
Although even that example can be tricky, because a User is often
|
||
|
involved in some audit trail(s) of various other data records. In
|
||
|
such cases Rattail can update the historical records to reflect the
|
||
|
new "keep" User record; but in practice there may be edge cases as yet
|
||
|
unexplored.
|
||
|
|
||
|
Customer and Employee records etc. can present more of a challenge,
|
||
|
because often that data lives in multiple systems. The question
|
||
|
becomes, what should a merge actually *do*, i.e. what should the
|
||
|
ideal outcome be?
|
||
|
|
||
|
In particular your POS may have 2 customer records which you'd like to
|
||
|
merge, but even if your ideal outcome is for one of them to be deleted
|
||
|
(i.e. typical use case described above), the problem of historical
|
||
|
data may come up again. Often times both of the customer records will
|
||
|
already have accrued some transaction history within your POS, and it
|
||
|
may not be possible or practical to correct those with the new
|
||
|
("keep") customer reference.
|
||
|
|
||
|
But the merge tool is meant to be as flexible as is reasonable. Your
|
||
|
merge logic might be able to go ahead with certain "simple" merges but
|
||
|
then raise an error when complex situations are encountered. Then you
|
||
|
can look more closely at those and see what can be done (if anything).
|