diff --git a/MANIFEST.in b/MANIFEST.in
index b2e589b..9651ceb 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -6,3 +6,5 @@ include *.md
recursive-include rattail_corepos/corepos/office/scripts *.php
recursive-include rattail_corepos/db/alembic *.py
+
+recursive-include rattail_corepos/templates *.mako
diff --git a/rattail_corepos/emails.py b/rattail_corepos/emails.py
index ea254df..5d7484a 100644
--- a/rattail_corepos/emails.py
+++ b/rattail_corepos/emails.py
@@ -2,7 +2,7 @@
################################################################################
#
# Rattail -- Retail Software Framework
-# Copyright © 2010-2020 Lance Edgar
+# Copyright © 2010-2023 Lance Edgar
#
# This file is part of Rattail.
#
@@ -24,7 +24,7 @@
Email profiles for Rattail / CORE-POS integration
"""
-from rattail.emails import ImporterEmail
+from rattail.emails import ImporterEmail, ProblemReportEmail
class core_office_export_lane_op_updates(ImporterEmail):
@@ -35,6 +35,25 @@ class core_office_export_lane_op_updates(ImporterEmail):
abstract = False
+class corepos_problems_invalid_person_numbers(ProblemReportEmail):
+ """
+ Looks for `custdata` records with invalid person number sequence.
+ """
+ default_subject = "Invalid person numbers"
+ abstract = False
+
+ def sample_data(self, request):
+ from corepos.db.office_op import model as corepos
+
+ customer = corepos.CustData(card_number=42,
+ first_name="Fred",
+ last_name="Flintstone",
+ person_number=2)
+ return {
+ 'problems': [(customer, 1)]
+ }
+
+
class rattail_import_corepos_api_updates(ImporterEmail):
"""
Sent when a CORE-POS API -> Rattail import involves data changes.
diff --git a/rattail_corepos/problems/__init__.py b/rattail_corepos/problems/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/rattail_corepos/problems/corepos.py b/rattail_corepos/problems/corepos.py
new file mode 100644
index 0000000..c4590b0
--- /dev/null
+++ b/rattail_corepos/problems/corepos.py
@@ -0,0 +1,58 @@
+# -*- coding: utf-8; -*-
+################################################################################
+#
+# Rattail -- Retail Software Framework
+# Copyright © 2010-2023 Lance Edgar
+#
+# This file is part of Rattail.
+#
+# Rattail is free software: you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation, either version 3 of the License, or (at your option) any later
+# version.
+#
+# Rattail is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+# details.
+#
+# You should have received a copy of the GNU General Public License along with
+# Rattail. If not, see
+ There are ${len(problems)} customer records which have unexpected + person number sequence. This may throw off some logic which + expects the sequence to be valid. Please investigate and fix + at your convenience. +
+%def> + +<%def name="simple_row(obj, i)"> + <% customer, expected_person_number = obj %> +