diff --git a/osinaweb/addressbook/__pycache__/__init__.cpython-310.pyc b/osinaweb/addressbook/__pycache__/__init__.cpython-310.pyc
index 66d22a20..ac8f1b38 100644
Binary files a/osinaweb/addressbook/__pycache__/__init__.cpython-310.pyc and b/osinaweb/addressbook/__pycache__/__init__.cpython-310.pyc differ
diff --git a/osinaweb/addressbook/__pycache__/admin.cpython-310.pyc b/osinaweb/addressbook/__pycache__/admin.cpython-310.pyc
index 297614bd..58161bde 100644
Binary files a/osinaweb/addressbook/__pycache__/admin.cpython-310.pyc and b/osinaweb/addressbook/__pycache__/admin.cpython-310.pyc differ
diff --git a/osinaweb/addressbook/__pycache__/apps.cpython-310.pyc b/osinaweb/addressbook/__pycache__/apps.cpython-310.pyc
index 5031dc4e..cc404043 100644
Binary files a/osinaweb/addressbook/__pycache__/apps.cpython-310.pyc and b/osinaweb/addressbook/__pycache__/apps.cpython-310.pyc differ
diff --git a/osinaweb/addressbook/__pycache__/models.cpython-310.pyc b/osinaweb/addressbook/__pycache__/models.cpython-310.pyc
index 6fae882d..ab375676 100644
Binary files a/osinaweb/addressbook/__pycache__/models.cpython-310.pyc and b/osinaweb/addressbook/__pycache__/models.cpython-310.pyc differ
diff --git a/osinaweb/addressbook/migrations/__pycache__/0001_initial.cpython-310.pyc b/osinaweb/addressbook/migrations/__pycache__/0001_initial.cpython-310.pyc
index d8412ef9..5eb1e9ba 100644
Binary files a/osinaweb/addressbook/migrations/__pycache__/0001_initial.cpython-310.pyc and b/osinaweb/addressbook/migrations/__pycache__/0001_initial.cpython-310.pyc differ
diff --git a/osinaweb/addressbook/migrations/__pycache__/0002_country_addressbook.cpython-310.pyc b/osinaweb/addressbook/migrations/__pycache__/0002_country_addressbook.cpython-310.pyc
index b3c2d895..5ed33820 100644
Binary files a/osinaweb/addressbook/migrations/__pycache__/0002_country_addressbook.cpython-310.pyc and b/osinaweb/addressbook/migrations/__pycache__/0002_country_addressbook.cpython-310.pyc differ
diff --git a/osinaweb/addressbook/migrations/__pycache__/0003_contact.cpython-310.pyc b/osinaweb/addressbook/migrations/__pycache__/0003_contact.cpython-310.pyc
index 3cca92c6..61a3717d 100644
Binary files a/osinaweb/addressbook/migrations/__pycache__/0003_contact.cpython-310.pyc and b/osinaweb/addressbook/migrations/__pycache__/0003_contact.cpython-310.pyc differ
diff --git a/osinaweb/addressbook/migrations/__pycache__/0004_socialmedia.cpython-310.pyc b/osinaweb/addressbook/migrations/__pycache__/0004_socialmedia.cpython-310.pyc
index 14911f4b..0b4ad2b8 100644
Binary files a/osinaweb/addressbook/migrations/__pycache__/0004_socialmedia.cpython-310.pyc and b/osinaweb/addressbook/migrations/__pycache__/0004_socialmedia.cpython-310.pyc differ
diff --git a/osinaweb/addressbook/migrations/__pycache__/0005_socialmedia_addressbook.cpython-310.pyc b/osinaweb/addressbook/migrations/__pycache__/0005_socialmedia_addressbook.cpython-310.pyc
index edaadae7..b101e5b8 100644
Binary files a/osinaweb/addressbook/migrations/__pycache__/0005_socialmedia_addressbook.cpython-310.pyc and b/osinaweb/addressbook/migrations/__pycache__/0005_socialmedia_addressbook.cpython-310.pyc differ
diff --git a/osinaweb/addressbook/migrations/__pycache__/__init__.cpython-310.pyc b/osinaweb/addressbook/migrations/__pycache__/__init__.cpython-310.pyc
index b42c8372..f5321633 100644
Binary files a/osinaweb/addressbook/migrations/__pycache__/__init__.cpython-310.pyc and b/osinaweb/addressbook/migrations/__pycache__/__init__.cpython-310.pyc differ
diff --git a/osinaweb/billing/__pycache__/__init__.cpython-310.pyc b/osinaweb/billing/__pycache__/__init__.cpython-310.pyc
index d8b20a2a..0e5d7947 100644
Binary files a/osinaweb/billing/__pycache__/__init__.cpython-310.pyc and b/osinaweb/billing/__pycache__/__init__.cpython-310.pyc differ
diff --git a/osinaweb/billing/__pycache__/admin.cpython-310.pyc b/osinaweb/billing/__pycache__/admin.cpython-310.pyc
index 79ad7f4a..b2c8896c 100644
Binary files a/osinaweb/billing/__pycache__/admin.cpython-310.pyc and b/osinaweb/billing/__pycache__/admin.cpython-310.pyc differ
diff --git a/osinaweb/billing/__pycache__/apps.cpython-310.pyc b/osinaweb/billing/__pycache__/apps.cpython-310.pyc
index 937e1fa8..951dd5ef 100644
Binary files a/osinaweb/billing/__pycache__/apps.cpython-310.pyc and b/osinaweb/billing/__pycache__/apps.cpython-310.pyc differ
diff --git a/osinaweb/billing/__pycache__/models.cpython-310.pyc b/osinaweb/billing/__pycache__/models.cpython-310.pyc
index d51a6493..42985af6 100644
Binary files a/osinaweb/billing/__pycache__/models.cpython-310.pyc and b/osinaweb/billing/__pycache__/models.cpython-310.pyc differ
diff --git a/osinaweb/billing/__pycache__/urls.cpython-310.pyc b/osinaweb/billing/__pycache__/urls.cpython-310.pyc
index 883d5906..4de030d9 100644
Binary files a/osinaweb/billing/__pycache__/urls.cpython-310.pyc and b/osinaweb/billing/__pycache__/urls.cpython-310.pyc differ
diff --git a/osinaweb/billing/__pycache__/views.cpython-310.pyc b/osinaweb/billing/__pycache__/views.cpython-310.pyc
index 17eb1890..13b35cb5 100644
Binary files a/osinaweb/billing/__pycache__/views.cpython-310.pyc and b/osinaweb/billing/__pycache__/views.cpython-310.pyc differ
diff --git a/osinaweb/billing/add/__pycache__/urls.cpython-310.pyc b/osinaweb/billing/add/__pycache__/urls.cpython-310.pyc
index bdd1735c..9dbf47d6 100644
Binary files a/osinaweb/billing/add/__pycache__/urls.cpython-310.pyc and b/osinaweb/billing/add/__pycache__/urls.cpython-310.pyc differ
diff --git a/osinaweb/billing/add/__pycache__/views.cpython-310.pyc b/osinaweb/billing/add/__pycache__/views.cpython-310.pyc
index 03a30e24..e521fcf0 100644
Binary files a/osinaweb/billing/add/__pycache__/views.cpython-310.pyc and b/osinaweb/billing/add/__pycache__/views.cpython-310.pyc differ
diff --git a/osinaweb/billing/delete/__pycache__/urls.cpython-310.pyc b/osinaweb/billing/delete/__pycache__/urls.cpython-310.pyc
index 6de0e566..7fcad60e 100644
Binary files a/osinaweb/billing/delete/__pycache__/urls.cpython-310.pyc and b/osinaweb/billing/delete/__pycache__/urls.cpython-310.pyc differ
diff --git a/osinaweb/billing/delete/__pycache__/views.cpython-310.pyc b/osinaweb/billing/delete/__pycache__/views.cpython-310.pyc
index ba6f3ce7..f6ac0f5f 100644
Binary files a/osinaweb/billing/delete/__pycache__/views.cpython-310.pyc and b/osinaweb/billing/delete/__pycache__/views.cpython-310.pyc differ
diff --git a/osinaweb/billing/edit/__pycache__/urls.cpython-310.pyc b/osinaweb/billing/edit/__pycache__/urls.cpython-310.pyc
index 27131e9e..1183d9e7 100644
Binary files a/osinaweb/billing/edit/__pycache__/urls.cpython-310.pyc and b/osinaweb/billing/edit/__pycache__/urls.cpython-310.pyc differ
diff --git a/osinaweb/billing/edit/__pycache__/views.cpython-310.pyc b/osinaweb/billing/edit/__pycache__/views.cpython-310.pyc
index 6eee0e0a..d354f763 100644
Binary files a/osinaweb/billing/edit/__pycache__/views.cpython-310.pyc and b/osinaweb/billing/edit/__pycache__/views.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0001_initial.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0001_initial.cpython-310.pyc
index 84636bb9..ae4c1f24 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0001_initial.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0001_initial.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0002_service_active_service_cancelled_at_and_more.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0002_service_active_service_cancelled_at_and_more.cpython-310.pyc
index 9eddf674..4949ae16 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0002_service_active_service_cancelled_at_and_more.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0002_service_active_service_cancelled_at_and_more.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0003_payment_servicepayment.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0003_payment_servicepayment.cpython-310.pyc
index af008637..9571d41c 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0003_payment_servicepayment.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0003_payment_servicepayment.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0004_rename_payment_paymenttype.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0004_rename_payment_paymenttype.cpython-310.pyc
index 7110a775..611fba71 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0004_rename_payment_paymenttype.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0004_rename_payment_paymenttype.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0005_service_recurring_cycle.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0005_service_recurring_cycle.cpython-310.pyc
index 884a9d39..f9237d2e 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0005_service_recurring_cycle.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0005_service_recurring_cycle.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0006_alter_service_cancelled_at_alter_service_created_at_and_more.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0006_alter_service_cancelled_at_alter_service_created_at_and_more.cpython-310.pyc
index b0447213..06abf918 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0006_alter_service_cancelled_at_alter_service_created_at_and_more.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0006_alter_service_cancelled_at_alter_service_created_at_and_more.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0007_alter_service_recurring_cycle.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0007_alter_service_recurring_cycle.cpython-310.pyc
index 2ef75749..d4c4fdea 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0007_alter_service_recurring_cycle.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0007_alter_service_recurring_cycle.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0008_alter_service_type.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0008_alter_service_type.cpython-310.pyc
index 740f95c3..a55e769b 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0008_alter_service_type.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0008_alter_service_type.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0009_remove_service_due_at_remove_servicepayment_service_and_more.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0009_remove_service_due_at_remove_servicepayment_service_and_more.cpython-310.pyc
index 9d5e16d8..db485a08 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0009_remove_service_due_at_remove_servicepayment_service_and_more.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0009_remove_service_due_at_remove_servicepayment_service_and_more.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0010_charge_amount.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0010_charge_amount.cpython-310.pyc
index 97bf9883..59601d48 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0010_charge_amount.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0010_charge_amount.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0011_invoice.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0011_invoice.cpython-310.pyc
index c950cabc..79b321b7 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0011_invoice.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0011_invoice.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0012_remove_servicepayment_charge_receipt_and_more.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0012_remove_servicepayment_charge_receipt_and_more.cpython-310.pyc
index 59091908..50ddf056 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0012_remove_servicepayment_charge_receipt_and_more.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0012_remove_servicepayment_charge_receipt_and_more.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0013_alter_invoice_date_created.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0013_alter_invoice_date_created.cpython-310.pyc
index 84eb4783..6bd3a10b 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0013_alter_invoice_date_created.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0013_alter_invoice_date_created.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0014_servicepayment_comment.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0014_servicepayment_comment.cpython-310.pyc
index 40aabe51..996ab974 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0014_servicepayment_comment.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0014_servicepayment_comment.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0015_order.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0015_order.cpython-310.pyc
index cb434dbe..20d2d334 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0015_order.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0015_order.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0016_alter_order_status.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0016_alter_order_status.cpython-310.pyc
index 83d6189a..d4b6db9f 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0016_alter_order_status.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0016_alter_order_status.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0017_service_order.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0017_service_order.cpython-310.pyc
index 6b7e3773..1a8c66f8 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0017_service_order.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0017_service_order.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0018_alter_order_status.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0018_alter_order_status.cpython-310.pyc
index 2b4bb20e..92488f30 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0018_alter_order_status.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0018_alter_order_status.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0019_item_orderpayment_remove_service_customer_and_more.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0019_item_orderpayment_remove_service_customer_and_more.cpython-310.pyc
index 5bf071c4..f1ab6154 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0019_item_orderpayment_remove_service_customer_and_more.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0019_item_orderpayment_remove_service_customer_and_more.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0020_orderitem.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0020_orderitem.cpython-310.pyc
index 74f4d321..9cb10e59 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0020_orderitem.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0020_orderitem.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0021_remove_item_recurring_cycle_and_more.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0021_remove_item_recurring_cycle_and_more.cpython-310.pyc
index b4833c0c..9e1bf9d3 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0021_remove_item_recurring_cycle_and_more.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0021_remove_item_recurring_cycle_and_more.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0022_remove_item_cancelled_at_remove_item_created_at_and_more.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0022_remove_item_cancelled_at_remove_item_created_at_and_more.cpython-310.pyc
index 88a01926..e070c7a2 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0022_remove_item_cancelled_at_remove_item_created_at_and_more.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0022_remove_item_cancelled_at_remove_item_created_at_and_more.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0023_alter_item_project_alter_item_type.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0023_alter_item_project_alter_item_type.cpython-310.pyc
index 57f3d4ce..24375a71 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0023_alter_item_project_alter_item_type.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0023_alter_item_project_alter_item_type.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0024_remove_item_active.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0024_remove_item_active.cpython-310.pyc
index 04b328aa..69157d9c 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0024_remove_item_active.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0024_remove_item_active.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0025_remove_item_project_item_customer.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0025_remove_item_project_item_customer.cpython-310.pyc
index b7fcebe8..7d9b4d9d 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0025_remove_item_project_item_customer.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0025_remove_item_project_item_customer.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0026_rename_type_item_item_type_remove_order_paid.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0026_rename_type_item_item_type_remove_order_paid.cpython-310.pyc
index 24947c8d..ae6d5e3b 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0026_rename_type_item_item_type_remove_order_paid.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0026_rename_type_item_item_type_remove_order_paid.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0027_item_type.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0027_item_type.cpython-310.pyc
index 8df0a23a..d2892be7 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0027_item_type.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0027_item_type.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0028_remove_order_due_date.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0028_remove_order_due_date.cpython-310.pyc
index ee3b864c..9ede2a3a 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0028_remove_order_due_date.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0028_remove_order_due_date.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0029_invoice_pdf.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0029_invoice_pdf.cpython-310.pyc
index 5f62447d..04b6ef3d 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0029_invoice_pdf.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0029_invoice_pdf.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0030_alter_invoice_order.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0030_alter_invoice_order.cpython-310.pyc
index 0013e587..8390f674 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0030_alter_invoice_order.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0030_alter_invoice_order.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0031_alter_invoice_invoice_number.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0031_alter_invoice_invoice_number.cpython-310.pyc
index e18a1235..eec60023 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0031_alter_invoice_invoice_number.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0031_alter_invoice_invoice_number.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0032_order_business.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0032_order_business.cpython-310.pyc
index 8bd5cea0..66cc8779 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0032_order_business.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0032_order_business.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0033_alter_order_status.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0033_alter_order_status.cpython-310.pyc
index 7c68585c..9fad05f4 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0033_alter_order_status.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0033_alter_order_status.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0034_alter_invoice_pdf.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0034_alter_invoice_pdf.cpython-310.pyc
index 89dfff00..a5cc0bf0 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0034_alter_invoice_pdf.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0034_alter_invoice_pdf.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0035_alter_invoice_pdf.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0035_alter_invoice_pdf.cpython-310.pyc
index 40b7f9ff..70465eed 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0035_alter_invoice_pdf.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0035_alter_invoice_pdf.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0036_alter_invoice_invoice_number.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0036_alter_invoice_invoice_number.cpython-310.pyc
index 0dc0e0fe..f33a0e37 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0036_alter_invoice_invoice_number.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0036_alter_invoice_invoice_number.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0037_recurringcycle_item.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0037_recurringcycle_item.cpython-310.pyc
index 2ff7e03d..585d37bf 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0037_recurringcycle_item.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0037_recurringcycle_item.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0038_alter_invoice_pdf.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0038_alter_invoice_pdf.cpython-310.pyc
index fe5e15e9..0c280e14 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0038_alter_invoice_pdf.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0038_alter_invoice_pdf.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0039_recurringcycle_cycle_price.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0039_recurringcycle_cycle_price.cpython-310.pyc
index aabb9894..6a21bf03 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0039_recurringcycle_cycle_price.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0039_recurringcycle_cycle_price.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0040_rename_due_at_orderitem_end_at_and_more.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0040_rename_due_at_orderitem_end_at_and_more.cpython-310.pyc
index e0ca1b4d..ba27a706 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0040_rename_due_at_orderitem_end_at_and_more.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0040_rename_due_at_orderitem_end_at_and_more.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0041_orderitem_active.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0041_orderitem_active.cpython-310.pyc
index 02e45cf0..d37d26eb 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0041_orderitem_active.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0041_orderitem_active.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0042_order_due_date.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0042_order_due_date.cpython-310.pyc
index 7dc9f9fe..dc0a33ac 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0042_order_due_date.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0042_order_due_date.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0043_alter_invoice_pdf.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0043_alter_invoice_pdf.cpython-310.pyc
index 8d78d54c..1174fd86 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0043_alter_invoice_pdf.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0043_alter_invoice_pdf.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0044_alter_orderitem_active.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0044_alter_orderitem_active.cpython-310.pyc
index edaccf14..fd26df9b 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0044_alter_orderitem_active.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0044_alter_orderitem_active.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0045_orderpayment_date_due_alter_orderpayment_date_paid.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0045_orderpayment_date_due_alter_orderpayment_date_paid.cpython-310.pyc
index 3cf884f6..6503ee82 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0045_orderpayment_date_due_alter_orderpayment_date_paid.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0045_orderpayment_date_due_alter_orderpayment_date_paid.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0046_remove_orderpayment_order_orderpayment_order.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0046_remove_orderpayment_order_orderpayment_order.cpython-310.pyc
index a971afbe..31a7113b 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0046_remove_orderpayment_order_orderpayment_order.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0046_remove_orderpayment_order_orderpayment_order.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0047_paymenttype_description_paymenttype_image.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0047_paymenttype_description_paymenttype_image.cpython-310.pyc
index e119b86c..2bc5b2e3 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0047_paymenttype_description_paymenttype_image.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0047_paymenttype_description_paymenttype_image.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0048_remove_order_status_orderstatus.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0048_remove_order_status_orderstatus.cpython-310.pyc
index bd00b89e..d1e9b93f 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0048_remove_order_status_orderstatus.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0048_remove_order_status_orderstatus.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0049_rename_due_date_order_date.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0049_rename_due_date_order_date.cpython-310.pyc
index 462eba59..1cdd0e72 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0049_rename_due_date_order_date.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0049_rename_due_date_order_date.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0050_remove_orderpayment_type_orderpayment_type.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0050_remove_orderpayment_type_orderpayment_type.cpython-310.pyc
index 23dcd427..db7f9cd3 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0050_remove_orderpayment_type_orderpayment_type.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0050_remove_orderpayment_type_orderpayment_type.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0051_alter_orderpayment_amount.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0051_alter_orderpayment_amount.cpython-310.pyc
index 80c47095..69a16489 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0051_alter_orderpayment_amount.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0051_alter_orderpayment_amount.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/0052_alter_orderstatus_status.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0052_alter_orderstatus_status.cpython-310.pyc
index 1ddd345b..e8115601 100644
Binary files a/osinaweb/billing/migrations/__pycache__/0052_alter_orderstatus_status.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/0052_alter_orderstatus_status.cpython-310.pyc differ
diff --git a/osinaweb/billing/migrations/__pycache__/__init__.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/__init__.cpython-310.pyc
index 68df8073..69044ae3 100644
Binary files a/osinaweb/billing/migrations/__pycache__/__init__.cpython-310.pyc and b/osinaweb/billing/migrations/__pycache__/__init__.cpython-310.pyc differ
diff --git a/osinaweb/customercore/__pycache__/__init__.cpython-310.pyc b/osinaweb/customercore/__pycache__/__init__.cpython-310.pyc
index 37e0f8e5..d6778a67 100644
Binary files a/osinaweb/customercore/__pycache__/__init__.cpython-310.pyc and b/osinaweb/customercore/__pycache__/__init__.cpython-310.pyc differ
diff --git a/osinaweb/customercore/__pycache__/admin.cpython-310.pyc b/osinaweb/customercore/__pycache__/admin.cpython-310.pyc
index 740d0d41..8ffb7a0d 100644
Binary files a/osinaweb/customercore/__pycache__/admin.cpython-310.pyc and b/osinaweb/customercore/__pycache__/admin.cpython-310.pyc differ
diff --git a/osinaweb/customercore/__pycache__/apps.cpython-310.pyc b/osinaweb/customercore/__pycache__/apps.cpython-310.pyc
index fd56b25b..6c530d0c 100644
Binary files a/osinaweb/customercore/__pycache__/apps.cpython-310.pyc and b/osinaweb/customercore/__pycache__/apps.cpython-310.pyc differ
diff --git a/osinaweb/customercore/__pycache__/custom_context.cpython-310.pyc b/osinaweb/customercore/__pycache__/custom_context.cpython-310.pyc
index 7b9fcb6e..5b8d067b 100644
Binary files a/osinaweb/customercore/__pycache__/custom_context.cpython-310.pyc and b/osinaweb/customercore/__pycache__/custom_context.cpython-310.pyc differ
diff --git a/osinaweb/customercore/__pycache__/decorators.cpython-310.pyc b/osinaweb/customercore/__pycache__/decorators.cpython-310.pyc
index 6c8845a9..c8fd75d2 100644
Binary files a/osinaweb/customercore/__pycache__/decorators.cpython-310.pyc and b/osinaweb/customercore/__pycache__/decorators.cpython-310.pyc differ
diff --git a/osinaweb/customercore/__pycache__/models.cpython-310.pyc b/osinaweb/customercore/__pycache__/models.cpython-310.pyc
index 78d22c82..d097c455 100644
Binary files a/osinaweb/customercore/__pycache__/models.cpython-310.pyc and b/osinaweb/customercore/__pycache__/models.cpython-310.pyc differ
diff --git a/osinaweb/customercore/__pycache__/urls.cpython-310.pyc b/osinaweb/customercore/__pycache__/urls.cpython-310.pyc
index 6a24e04d..146c2984 100644
Binary files a/osinaweb/customercore/__pycache__/urls.cpython-310.pyc and b/osinaweb/customercore/__pycache__/urls.cpython-310.pyc differ
diff --git a/osinaweb/customercore/__pycache__/views.cpython-310.pyc b/osinaweb/customercore/__pycache__/views.cpython-310.pyc
index 63909f71..1a4fec33 100644
Binary files a/osinaweb/customercore/__pycache__/views.cpython-310.pyc and b/osinaweb/customercore/__pycache__/views.cpython-310.pyc differ
diff --git a/osinaweb/customercore/admin.py b/osinaweb/customercore/admin.py
index fa944c3e..4f3d3dc9 100644
--- a/osinaweb/customercore/admin.py
+++ b/osinaweb/customercore/admin.py
@@ -3,7 +3,7 @@ from .models import *
# Register your models here.
admin.site.register(Ticket)
-admin.site.register(TicketStatusUpdate)
+admin.site.register(TicketStatus)
admin.site.register(TicketRead)
admin.site.register(TicketUpdate)
admin.site.register(TicketAttachment)
diff --git a/osinaweb/customercore/custom_context.py b/osinaweb/customercore/custom_context.py
index e51fcf80..40f93bc7 100644
--- a/osinaweb/customercore/custom_context.py
+++ b/osinaweb/customercore/custom_context.py
@@ -33,13 +33,4 @@ def utilities(request):
unread_updates_count += 1
ticket.unread_updates_count = unread_updates_count
- last_update = ticket.ticketupdate_set.order_by('-date_added').first()
- if last_update:
- ticket.last_update_added_by = last_update.added_by.first_name
- ticket.last_update_date_added = last_update.date_added
- else:
- ticket.last_update_added_by = None
- ticket.last_update_date_added = None
-
-
return {'active_subscriptions': active_subscriptions, 'customer_open_tickets': customer_open_tickets, 'customer_open_tickets_count':customer_open_tickets_count, 'customer_open_projects_count': customer_open_projects_count, 'customer_open_invoices_count': customer_open_invoices_count}
diff --git a/osinaweb/customercore/migrations/0012_ticket_ticket_members.py b/osinaweb/customercore/migrations/0012_ticket_ticket_members.py
new file mode 100644
index 00000000..33d921a6
--- /dev/null
+++ b/osinaweb/customercore/migrations/0012_ticket_ticket_members.py
@@ -0,0 +1,20 @@
+# Generated by Django 4.2.5 on 2024-05-18 17:49
+
+from django.conf import settings
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+ ('customercore', '0011_ticketupdatereaction_customer'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='ticket',
+ name='ticket_members',
+ field=models.ManyToManyField(blank=True, null=True, related_name='ticket_members', to=settings.AUTH_USER_MODEL),
+ ),
+ ]
diff --git a/osinaweb/customercore/migrations/0013_alter_ticket_ticket_members.py b/osinaweb/customercore/migrations/0013_alter_ticket_ticket_members.py
new file mode 100644
index 00000000..7179f5e0
--- /dev/null
+++ b/osinaweb/customercore/migrations/0013_alter_ticket_ticket_members.py
@@ -0,0 +1,19 @@
+# Generated by Django 4.2.5 on 2024-05-18 17:53
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('osinacore', '0081_status_task'),
+ ('customercore', '0012_ticket_ticket_members'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='ticket',
+ name='ticket_members',
+ field=models.ManyToManyField(blank=True, null=True, related_name='ticket_members', to='osinacore.staffprofile'),
+ ),
+ ]
diff --git a/osinaweb/customercore/migrations/0014_remove_ticket_department_ticket_department.py b/osinaweb/customercore/migrations/0014_remove_ticket_department_ticket_department.py
new file mode 100644
index 00000000..b959e4fa
--- /dev/null
+++ b/osinaweb/customercore/migrations/0014_remove_ticket_department_ticket_department.py
@@ -0,0 +1,23 @@
+# Generated by Django 4.2.5 on 2024-05-18 17:56
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('osinacore', '0081_status_task'),
+ ('customercore', '0013_alter_ticket_ticket_members'),
+ ]
+
+ operations = [
+ migrations.RemoveField(
+ model_name='ticket',
+ name='department',
+ ),
+ migrations.AddField(
+ model_name='ticket',
+ name='department',
+ field=models.ManyToManyField(blank=True, null=True, to='osinacore.department'),
+ ),
+ ]
diff --git a/osinaweb/customercore/migrations/0015_rename_department_ticket_departments.py b/osinaweb/customercore/migrations/0015_rename_department_ticket_departments.py
new file mode 100644
index 00000000..1b306162
--- /dev/null
+++ b/osinaweb/customercore/migrations/0015_rename_department_ticket_departments.py
@@ -0,0 +1,18 @@
+# Generated by Django 4.2.5 on 2024-05-18 18:15
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('customercore', '0014_remove_ticket_department_ticket_department'),
+ ]
+
+ operations = [
+ migrations.RenameField(
+ model_name='ticket',
+ old_name='department',
+ new_name='departments',
+ ),
+ ]
diff --git a/osinaweb/customercore/migrations/0016_rename_ticketstatusupdate_ticketstatus.py b/osinaweb/customercore/migrations/0016_rename_ticketstatusupdate_ticketstatus.py
new file mode 100644
index 00000000..627f9ebd
--- /dev/null
+++ b/osinaweb/customercore/migrations/0016_rename_ticketstatusupdate_ticketstatus.py
@@ -0,0 +1,19 @@
+# Generated by Django 4.2.5 on 2024-05-18 18:49
+
+from django.conf import settings
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+ ('customercore', '0015_rename_department_ticket_departments'),
+ ]
+
+ operations = [
+ migrations.RenameModel(
+ old_name='TicketStatusUpdate',
+ new_name='TicketStatus',
+ ),
+ ]
diff --git a/osinaweb/customercore/migrations/__pycache__/0001_initial.cpython-310.pyc b/osinaweb/customercore/migrations/__pycache__/0001_initial.cpython-310.pyc
index 4813d818..4c603123 100644
Binary files a/osinaweb/customercore/migrations/__pycache__/0001_initial.cpython-310.pyc and b/osinaweb/customercore/migrations/__pycache__/0001_initial.cpython-310.pyc differ
diff --git a/osinaweb/customercore/migrations/__pycache__/0002_alter_ticket_department.cpython-310.pyc b/osinaweb/customercore/migrations/__pycache__/0002_alter_ticket_department.cpython-310.pyc
index 7d9afddc..5d7093e2 100644
Binary files a/osinaweb/customercore/migrations/__pycache__/0002_alter_ticket_department.cpython-310.pyc and b/osinaweb/customercore/migrations/__pycache__/0002_alter_ticket_department.cpython-310.pyc differ
diff --git a/osinaweb/customercore/migrations/__pycache__/0003_ticket_customer_ticket_status_and_more.cpython-310.pyc b/osinaweb/customercore/migrations/__pycache__/0003_ticket_customer_ticket_status_and_more.cpython-310.pyc
index c4d946d3..e83c5431 100644
Binary files a/osinaweb/customercore/migrations/__pycache__/0003_ticket_customer_ticket_status_and_more.cpython-310.pyc and b/osinaweb/customercore/migrations/__pycache__/0003_ticket_customer_ticket_status_and_more.cpython-310.pyc differ
diff --git a/osinaweb/customercore/migrations/__pycache__/0004_ticket_ticket_number_and_more.cpython-310.pyc b/osinaweb/customercore/migrations/__pycache__/0004_ticket_ticket_number_and_more.cpython-310.pyc
index 45449180..f865008d 100644
Binary files a/osinaweb/customercore/migrations/__pycache__/0004_ticket_ticket_number_and_more.cpython-310.pyc and b/osinaweb/customercore/migrations/__pycache__/0004_ticket_ticket_number_and_more.cpython-310.pyc differ
diff --git a/osinaweb/customercore/migrations/__pycache__/0005_ticketstatusupdate.cpython-310.pyc b/osinaweb/customercore/migrations/__pycache__/0005_ticketstatusupdate.cpython-310.pyc
index 67ab08e8..642c7c2d 100644
Binary files a/osinaweb/customercore/migrations/__pycache__/0005_ticketstatusupdate.cpython-310.pyc and b/osinaweb/customercore/migrations/__pycache__/0005_ticketstatusupdate.cpython-310.pyc differ
diff --git a/osinaweb/customercore/migrations/__pycache__/0006_ticketupdate_read.cpython-310.pyc b/osinaweb/customercore/migrations/__pycache__/0006_ticketupdate_read.cpython-310.pyc
index 296cfde3..eec5dc0e 100644
Binary files a/osinaweb/customercore/migrations/__pycache__/0006_ticketupdate_read.cpython-310.pyc and b/osinaweb/customercore/migrations/__pycache__/0006_ticketupdate_read.cpython-310.pyc differ
diff --git a/osinaweb/customercore/migrations/__pycache__/0007_remove_ticketupdate_read_ticketupdatereadstatus.cpython-310.pyc b/osinaweb/customercore/migrations/__pycache__/0007_remove_ticketupdate_read_ticketupdatereadstatus.cpython-310.pyc
index fa736b88..a589f339 100644
Binary files a/osinaweb/customercore/migrations/__pycache__/0007_remove_ticketupdate_read_ticketupdatereadstatus.cpython-310.pyc and b/osinaweb/customercore/migrations/__pycache__/0007_remove_ticketupdate_read_ticketupdatereadstatus.cpython-310.pyc differ
diff --git a/osinaweb/customercore/migrations/__pycache__/0008_rename_ticketupdatereadstatus_ticketread.cpython-310.pyc b/osinaweb/customercore/migrations/__pycache__/0008_rename_ticketupdatereadstatus_ticketread.cpython-310.pyc
index 5088f604..b8cb75f6 100644
Binary files a/osinaweb/customercore/migrations/__pycache__/0008_rename_ticketupdatereadstatus_ticketread.cpython-310.pyc and b/osinaweb/customercore/migrations/__pycache__/0008_rename_ticketupdatereadstatus_ticketread.cpython-310.pyc differ
diff --git a/osinaweb/customercore/migrations/__pycache__/0009_alter_ticketattachment_ticket.cpython-310.pyc b/osinaweb/customercore/migrations/__pycache__/0009_alter_ticketattachment_ticket.cpython-310.pyc
index 3bc506da..fa2537ba 100644
Binary files a/osinaweb/customercore/migrations/__pycache__/0009_alter_ticketattachment_ticket.cpython-310.pyc and b/osinaweb/customercore/migrations/__pycache__/0009_alter_ticketattachment_ticket.cpython-310.pyc differ
diff --git a/osinaweb/customercore/migrations/__pycache__/0010_rename_ticketreaction_ticketupdatereaction.cpython-310.pyc b/osinaweb/customercore/migrations/__pycache__/0010_rename_ticketreaction_ticketupdatereaction.cpython-310.pyc
index 0a4f961a..7a9f6b1f 100644
Binary files a/osinaweb/customercore/migrations/__pycache__/0010_rename_ticketreaction_ticketupdatereaction.cpython-310.pyc and b/osinaweb/customercore/migrations/__pycache__/0010_rename_ticketreaction_ticketupdatereaction.cpython-310.pyc differ
diff --git a/osinaweb/customercore/migrations/__pycache__/0011_ticketupdatereaction_customer.cpython-310.pyc b/osinaweb/customercore/migrations/__pycache__/0011_ticketupdatereaction_customer.cpython-310.pyc
index 9d9ac1c0..f22433c3 100644
Binary files a/osinaweb/customercore/migrations/__pycache__/0011_ticketupdatereaction_customer.cpython-310.pyc and b/osinaweb/customercore/migrations/__pycache__/0011_ticketupdatereaction_customer.cpython-310.pyc differ
diff --git a/osinaweb/customercore/migrations/__pycache__/0012_ticket_ticket_members.cpython-310.pyc b/osinaweb/customercore/migrations/__pycache__/0012_ticket_ticket_members.cpython-310.pyc
new file mode 100644
index 00000000..5c90ece9
Binary files /dev/null and b/osinaweb/customercore/migrations/__pycache__/0012_ticket_ticket_members.cpython-310.pyc differ
diff --git a/osinaweb/customercore/migrations/__pycache__/0013_alter_ticket_ticket_members.cpython-310.pyc b/osinaweb/customercore/migrations/__pycache__/0013_alter_ticket_ticket_members.cpython-310.pyc
new file mode 100644
index 00000000..ee205f41
Binary files /dev/null and b/osinaweb/customercore/migrations/__pycache__/0013_alter_ticket_ticket_members.cpython-310.pyc differ
diff --git a/osinaweb/customercore/migrations/__pycache__/0014_remove_ticket_department_ticket_department.cpython-310.pyc b/osinaweb/customercore/migrations/__pycache__/0014_remove_ticket_department_ticket_department.cpython-310.pyc
new file mode 100644
index 00000000..28cdc4fb
Binary files /dev/null and b/osinaweb/customercore/migrations/__pycache__/0014_remove_ticket_department_ticket_department.cpython-310.pyc differ
diff --git a/osinaweb/customercore/migrations/__pycache__/0015_rename_department_ticket_departments.cpython-310.pyc b/osinaweb/customercore/migrations/__pycache__/0015_rename_department_ticket_departments.cpython-310.pyc
new file mode 100644
index 00000000..0ba5887e
Binary files /dev/null and b/osinaweb/customercore/migrations/__pycache__/0015_rename_department_ticket_departments.cpython-310.pyc differ
diff --git a/osinaweb/customercore/migrations/__pycache__/0016_rename_ticketstatusupdate_ticketstatus.cpython-310.pyc b/osinaweb/customercore/migrations/__pycache__/0016_rename_ticketstatusupdate_ticketstatus.cpython-310.pyc
new file mode 100644
index 00000000..b677984b
Binary files /dev/null and b/osinaweb/customercore/migrations/__pycache__/0016_rename_ticketstatusupdate_ticketstatus.cpython-310.pyc differ
diff --git a/osinaweb/customercore/migrations/__pycache__/__init__.cpython-310.pyc b/osinaweb/customercore/migrations/__pycache__/__init__.cpython-310.pyc
index 6f5fac73..15834e96 100644
Binary files a/osinaweb/customercore/migrations/__pycache__/__init__.cpython-310.pyc and b/osinaweb/customercore/migrations/__pycache__/__init__.cpython-310.pyc differ
diff --git a/osinaweb/customercore/models.py b/osinaweb/customercore/models.py
index 3d3dfa53..63e4ea4a 100644
--- a/osinaweb/customercore/models.py
+++ b/osinaweb/customercore/models.py
@@ -20,10 +20,11 @@ class Ticket(models.Model):
regarding = models.CharField(max_length=50, choices=REGARDING_CHOICES, null=True)
project = models.ForeignKey(Project, on_delete=models.SET_NULL, blank=True, null=True)
product = models.ForeignKey(Item, on_delete=models.SET_NULL, blank=True, null=True)
- department = models.ForeignKey(Department, on_delete=models.SET_NULL,null=True, blank=True)
+ departments = models.ManyToManyField(Department, null=True, blank=True)
opened_by = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
opened_date = models.DateTimeField()
customer = models.ForeignKey(CustomerProfile, on_delete=models.SET_NULL, null=True)
+ ticket_members = models.ManyToManyField(StaffProfile, null=True, blank=True, related_name='ticket_members')
def save(self, *args, **kwargs):
if not self.ticket_number:
last_ticket = Ticket.objects.filter(opened_date__year=timezone.now().year).order_by('-ticket_number').first()
@@ -40,7 +41,7 @@ class Ticket(models.Model):
super().save(*args, **kwargs)
-class TicketStatusUpdate(models.Model):
+class TicketStatus(models.Model):
STATUS_CHOICES = (
('Open', 'Open'),
('Working On', 'Working On'),
diff --git a/osinaweb/customercore/payment/__pycache__/urls.cpython-310.pyc b/osinaweb/customercore/payment/__pycache__/urls.cpython-310.pyc
index f627c4c4..af138f75 100644
Binary files a/osinaweb/customercore/payment/__pycache__/urls.cpython-310.pyc and b/osinaweb/customercore/payment/__pycache__/urls.cpython-310.pyc differ
diff --git a/osinaweb/customercore/payment/__pycache__/views.cpython-310.pyc b/osinaweb/customercore/payment/__pycache__/views.cpython-310.pyc
index 2718eb39..b6b631f4 100644
Binary files a/osinaweb/customercore/payment/__pycache__/views.cpython-310.pyc and b/osinaweb/customercore/payment/__pycache__/views.cpython-310.pyc differ
diff --git a/osinaweb/customercore/templates/email_templates/new_ticket.html b/osinaweb/customercore/templates/email_templates/new_ticket.html
new file mode 100644
index 00000000..d3a7eb7f
--- /dev/null
+++ b/osinaweb/customercore/templates/email_templates/new_ticket.html
@@ -0,0 +1,66 @@
+
+
+
+
+
+ Account Activation
+
+
+
+
+
New Ticket Opened by {{ticket.customer.user.first_name}} {{ticket.customer.user.last_name}}
+
Hello {{staff_first_name}},
+
A new ticket has been opened by {{ticket.customer.user.first_name}} {{ticket.customer.user.last_name}} with the following details:
+
Title: {{ ticket.title }}
+
Description: {{ ticket.description }}
+
Department: {{ ticket.department.name }}
+
Regarding:
+ {% if not ticket.project and not ticket.product %}
+ {{ ticket.regarding }}
+ {% elif ticket.product %}
+ {{ ticket.product }}
+ {% elif ticket.project %}
+ {{ ticket.project }}
+ {% endif %}
+
Opened By: {{ ticket.opened_by.first_name }} {{ ticket.opened_by.last_name }}
+
Opened Date: {{ ticket.opened_date }}
+
View Ticket
+
Regards,
The Ositcom Team
+
+
+
diff --git a/osinaweb/customercore/templates/email_templates/new_ticket_update.html b/osinaweb/customercore/templates/email_templates/new_ticket_update.html
new file mode 100644
index 00000000..c2c5624d
--- /dev/null
+++ b/osinaweb/customercore/templates/email_templates/new_ticket_update.html
@@ -0,0 +1,65 @@
+
+
+
+
+
+ Account Activation
+
+
+
+
+
New Ticket Update for: {{ticket_update.ticket.title}}
+
Hello {{staff_first_name}},
+
A new ticket update has been added by {{ticket_update.ticket.customer.user.first_name}} {{ticket_update.ticket.customer.user.last_name}} with the following details:
+
Ticket: {{ ticket_update.ticket.title }}
+
Regarding:
+ {% if not ticket_update.ticket.project and not ticket_update.ticket.product %}
+ {{ ticket_update.ticket.regarding }}
+ {% elif ticket_update.ticket.product %}
+ {{ ticket_update.ticket.product }}
+ {% elif ticket_update.ticket.project %}
+ {{ ticket_update.ticket.project }}
+ {% endif %}
+
Description: {{ ticket_update.description|safe }}
+
Added By: {{ticket_update.ticket.customer.user.first_name}} {{ticket_update.ticket.customer.user.last_name}}
+
Date: {{ ticket_update.date_added }}
+
View Update
+
Regards,
The Ositcom Team
+
+
+
diff --git a/osinaweb/customercore/templates/listing_pages/customer-tickets.html b/osinaweb/customercore/templates/listing_pages/customer-tickets.html
index f3e07ef3..9634f3a1 100644
--- a/osinaweb/customercore/templates/listing_pages/customer-tickets.html
+++ b/osinaweb/customercore/templates/listing_pages/customer-tickets.html
@@ -85,11 +85,11 @@
- {{ticket.last_update_date_added}}
+ {{ticket.ticketupdate_set.last.date_added}}
|
- {{ ticket.last_update_added_by }}
+ {{ticket.ticketupdate_set.last.added_by.first_name}}
|
@@ -164,11 +164,11 @@
|
- {{ ticket.last_update_date_added }}
+ {{ticket.ticketupdate_set.last.date_added}}
|
- {{ ticket.last_update_added_by }}
+ {{ticket.ticketupdate_set.last.added_by.first_name}}
|
{% endfor %}
diff --git a/osinaweb/customercore/views.py b/osinaweb/customercore/views.py
index b6642a91..83f46002 100644
--- a/osinaweb/customercore/views.py
+++ b/osinaweb/customercore/views.py
@@ -6,6 +6,10 @@ from .models import *
from django.db.models import Q
from django.http import Http404
from django.db.models import OuterRef, Subquery
+from django.core.mail import send_mail
+from django.template.loader import render_to_string
+from django.utils.html import strip_tags
+from django.conf import settings
# Create your views here.
@@ -29,21 +33,22 @@ def redirect_osicard(request):
# ADD
@customer_login_required
def customer_add_ticket(request, *args, **kwargs):
- customer_products = OrderItem.objects.filter(order__status='Completed', active__in=[True, None], item__type = 'Product', order__customer = request.user.customerprofile)
+ customer_products = OrderItem.objects.filter(active__in=[True, None], item__type = 'Product', order__customer = request.user.customerprofile)
customer_projects = Project.objects.filter(customer=request.user.customerprofile)
+ support_department = get_object_or_404(Department, name='Support')
if request.method == 'POST':
project = None
product = None
- department = None
+ departments = [support_department]
regarding = 'General/Account/Billing'
if request.POST.get('project') and request.POST.get('regarding') == 'Project':
project = get_object_or_404(Project, id=request.POST.get('project'))
- department = project.project_type.department
+ departments = [project.project_type.department]
regarding = 'Project/Product'
elif request.POST.get('product') and request.POST.get('regarding') == 'Product':
product = get_object_or_404(Item, id=request.POST.get('product'))
- department = product.item_type.department
+ departments = [product.item_type.department]
regarding = 'Project/Product'
ticket = Ticket(
status = 'Open',
@@ -53,24 +58,41 @@ def customer_add_ticket(request, *args, **kwargs):
regarding = regarding,
project = project,
product = product,
- department = department,
opened_by = request.user,
opened_date = datetime.now()
)
ticket.save()
- ticket_status_update = TicketStatusUpdate(
+ ticket.departments.set(departments)
+
+ ticket_status = TicketStatus(
ticket = ticket,
status = 'Open',
added_by = request.user,
date_added = datetime.now()
)
- ticket_status_update.save()
+ ticket_status.save()
for file in request.FILES.getlist('files'):
ticket_attachment = TicketAttachment(
ticket=ticket,
file=file
)
ticket_attachment.save()
+
+
+ department_ids = [dept.id for dept in departments]
+ staff_profiles = StaffProfile.objects.filter(staff_position__department__id__in=department_ids, active=True)
+ print(staff_profiles)
+ for staff in staff_profiles:
+ subject = f"New Ticket Opened: {ticket.title}"
+ html_message = render_to_string('email_templates/new_ticket.html', {
+ 'ticket': ticket,
+ 'staff_first_name': staff.user.first_name
+ })
+ plain_message = strip_tags(html_message)
+ from_email = settings.DEFAULT_FROM_EMAIL
+ to_email = staff.user.email
+
+ send_mail(subject, plain_message, from_email, [to_email], html_message=html_message)
return redirect('customerticketdetails', ticket_number=ticket.ticket_number)
context = {
@@ -102,12 +124,33 @@ def customer_add_ticket_update(request, ticket_id):
file=file
)
ticket_attachment.save()
+
+
+ if ticket.ticket_members.exists():
+ members_ids = ticket.ticket_members.values_list('id', flat=True)
+ staff_profiles = StaffProfile.objects.filter(id__in=members_ids)
+ else:
+ department_ids = ticket.departments.values_list('id', flat=True)
+ staff_profiles = StaffProfile.objects.filter(staff_position__department__id__in=department_ids, active=True)
+
+
+ for staff in staff_profiles:
+ subject = f"New Ticket Update: {ticket.title}"
+ html_message = render_to_string('email_templates/new_ticket_update.html', {
+ 'ticket_update': ticket_update,
+ 'staff_first_name': staff.user.first_name
+ })
+ plain_message = strip_tags(html_message)
+ from_email = settings.DEFAULT_FROM_EMAIL
+ to_email = staff.user.email
+
+ send_mail(subject, plain_message, from_email, [to_email], html_message=html_message)
+
+
return redirect('customerticketdetails', ticket_number=ticket.ticket_number)
context = {
'ticket': ticket,
-
-
}
return render(request, 'add_templates/customer-add-ticket.html', context)
@@ -231,38 +274,34 @@ def customer_project_details(request, project_id):
@customer_login_required
def customer_tickets(request, *args, **kwargs):
- open_tickets = Ticket.objects.filter(Q(status__in=['Open', 'Working On']) & Q(customer=request.user.customerprofile))
- closed_tickets = Ticket.objects.filter(Q(status__in=['Closed']) & Q(customer=request.user.customerprofile)).order_by('-id')
+ all_tickets = Ticket.objects.filter(customer=request.user.customerprofile)
+
+ all_tickets_with_update_date = all_tickets.annotate(
+ latest_update_date=Max('ticketupdate__date_added')
+ )
+ all_tickets_ordered = all_tickets_with_update_date.order_by('-latest_update_date')
+ open_tickets = []
+ closed_tickets = []
+ for ticket in all_tickets_ordered:
+ last_status = ticket.ticketstatus_set.last()
+ if last_status:
+ last_status = last_status.status
+ if last_status == 'Closed':
+ closed_tickets.append(ticket)
+ else:
+ open_tickets.append(ticket)
+ else:
+ # If no status is found, assume it's open
+ open_tickets.append(ticket)
for ticket in open_tickets:
unread_updates_count = 0
- last_update = ticket.ticketupdate_set.exclude(added_by=request.user).order_by('-date_added').first()
- if last_update:
- last_update_added_by = last_update.added_by
- last_update_date_added = last_update.date_added
- else:
- last_update_added_by = None
- last_update_date_added = None
-
for ticket_update in ticket.ticketupdate_set.exclude(added_by=request.user):
if not TicketRead.objects.filter(ticket_update=ticket_update, user=request.user, read=True).exists():
unread_updates_count += 1
ticket.unread_updates_count = unread_updates_count
- ticket.last_update_added_by = last_update_added_by
- ticket.last_update_date_added = last_update_date_added
-
- for ticket in closed_tickets:
- last_update = ticket.ticketupdate_set.order_by('-date_added').first()
- if last_update:
- last_update_added_by = last_update.added_by
- last_update_date_added = last_update.date_added
- else:
- last_update_added_by = None
- last_update_date_added = None
- ticket.last_update_added_by = last_update_added_by
- ticket.last_update_date_added = last_update_date_added
context = {
'open_tickets': open_tickets,
@@ -299,7 +338,7 @@ def customer_ticket_details(request, ticket_number):
if not TicketRead.objects.filter(ticket_update=update, user=request.user).exists():
TicketRead.objects.create(ticket_update=update, user=request.user, read=True)
- last_ticket_status = TicketStatusUpdate.objects.all().last()
+ last_ticket_status = TicketStatus.objects.all().last()
else:
ticket_updates = None
diff --git a/osinaweb/db.sqlite3 b/osinaweb/db.sqlite3
index 707be33c..97d1cc77 100644
Binary files a/osinaweb/db.sqlite3 and b/osinaweb/db.sqlite3 differ
diff --git a/osinaweb/osinacore/__pycache__/__init__.cpython-310.pyc b/osinaweb/osinacore/__pycache__/__init__.cpython-310.pyc
index a4416e70..24d1abc6 100644
Binary files a/osinaweb/osinacore/__pycache__/__init__.cpython-310.pyc and b/osinaweb/osinacore/__pycache__/__init__.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/__pycache__/admin.cpython-310.pyc b/osinaweb/osinacore/__pycache__/admin.cpython-310.pyc
index 4c8dcd4b..826962e2 100644
Binary files a/osinaweb/osinacore/__pycache__/admin.cpython-310.pyc and b/osinaweb/osinacore/__pycache__/admin.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/__pycache__/apps.cpython-310.pyc b/osinaweb/osinacore/__pycache__/apps.cpython-310.pyc
index 6a192eeb..005090e6 100644
Binary files a/osinaweb/osinacore/__pycache__/apps.cpython-310.pyc and b/osinaweb/osinacore/__pycache__/apps.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/__pycache__/custom_context.cpython-310.pyc b/osinaweb/osinacore/__pycache__/custom_context.cpython-310.pyc
index 3185cec6..c5831218 100644
Binary files a/osinaweb/osinacore/__pycache__/custom_context.cpython-310.pyc and b/osinaweb/osinacore/__pycache__/custom_context.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/__pycache__/decorators.cpython-310.pyc b/osinaweb/osinacore/__pycache__/decorators.cpython-310.pyc
index f13b9240..d7bd98fd 100644
Binary files a/osinaweb/osinacore/__pycache__/decorators.cpython-310.pyc and b/osinaweb/osinacore/__pycache__/decorators.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/__pycache__/forms.cpython-310.pyc b/osinaweb/osinacore/__pycache__/forms.cpython-310.pyc
index 1baf818d..f2b01981 100644
Binary files a/osinaweb/osinacore/__pycache__/forms.cpython-310.pyc and b/osinaweb/osinacore/__pycache__/forms.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/__pycache__/models.cpython-310.pyc b/osinaweb/osinacore/__pycache__/models.cpython-310.pyc
index 4e28e2f4..aaf67d1e 100644
Binary files a/osinaweb/osinacore/__pycache__/models.cpython-310.pyc and b/osinaweb/osinacore/__pycache__/models.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/__pycache__/urls.cpython-310.pyc b/osinaweb/osinacore/__pycache__/urls.cpython-310.pyc
index 21220fd7..ce2da76c 100644
Binary files a/osinaweb/osinacore/__pycache__/urls.cpython-310.pyc and b/osinaweb/osinacore/__pycache__/urls.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/__pycache__/views.cpython-310.pyc b/osinaweb/osinacore/__pycache__/views.cpython-310.pyc
index bb844e2b..39089197 100644
Binary files a/osinaweb/osinacore/__pycache__/views.cpython-310.pyc and b/osinaweb/osinacore/__pycache__/views.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/add/__pycache__/urls.cpython-310.pyc b/osinaweb/osinacore/add/__pycache__/urls.cpython-310.pyc
index 7feac632..dc022a45 100644
Binary files a/osinaweb/osinacore/add/__pycache__/urls.cpython-310.pyc and b/osinaweb/osinacore/add/__pycache__/urls.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/add/__pycache__/views.cpython-310.pyc b/osinaweb/osinacore/add/__pycache__/views.cpython-310.pyc
index e731cb15..1407ca00 100644
Binary files a/osinaweb/osinacore/add/__pycache__/views.cpython-310.pyc and b/osinaweb/osinacore/add/__pycache__/views.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/api/__pycache__/serializers.cpython-310.pyc b/osinaweb/osinacore/api/__pycache__/serializers.cpython-310.pyc
index 21d19d8b..87959e5e 100644
Binary files a/osinaweb/osinacore/api/__pycache__/serializers.cpython-310.pyc and b/osinaweb/osinacore/api/__pycache__/serializers.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/api/__pycache__/urls.cpython-310.pyc b/osinaweb/osinacore/api/__pycache__/urls.cpython-310.pyc
index 9cea727b..54c2175d 100644
Binary files a/osinaweb/osinacore/api/__pycache__/urls.cpython-310.pyc and b/osinaweb/osinacore/api/__pycache__/urls.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/api/__pycache__/views.cpython-310.pyc b/osinaweb/osinacore/api/__pycache__/views.cpython-310.pyc
index 78801d70..f867addc 100644
Binary files a/osinaweb/osinacore/api/__pycache__/views.cpython-310.pyc and b/osinaweb/osinacore/api/__pycache__/views.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/delete/__pycache__/urls.cpython-310.pyc b/osinaweb/osinacore/delete/__pycache__/urls.cpython-310.pyc
index cd9aec59..772b82f5 100644
Binary files a/osinaweb/osinacore/delete/__pycache__/urls.cpython-310.pyc and b/osinaweb/osinacore/delete/__pycache__/urls.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/delete/__pycache__/views.cpython-310.pyc b/osinaweb/osinacore/delete/__pycache__/views.cpython-310.pyc
index dd8bc2c9..f4bc5cd2 100644
Binary files a/osinaweb/osinacore/delete/__pycache__/views.cpython-310.pyc and b/osinaweb/osinacore/delete/__pycache__/views.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/edit/__pycache__/urls.cpython-310.pyc b/osinaweb/osinacore/edit/__pycache__/urls.cpython-310.pyc
index 9f7baad7..b589e439 100644
Binary files a/osinaweb/osinacore/edit/__pycache__/urls.cpython-310.pyc and b/osinaweb/osinacore/edit/__pycache__/urls.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/edit/__pycache__/views.cpython-310.pyc b/osinaweb/osinacore/edit/__pycache__/views.cpython-310.pyc
index f3d5d3ab..a05932e2 100644
Binary files a/osinaweb/osinacore/edit/__pycache__/views.cpython-310.pyc and b/osinaweb/osinacore/edit/__pycache__/views.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0001_initial.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0001_initial.cpython-310.pyc
index d32793ba..aa357b66 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0001_initial.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0001_initial.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0002_projecttype_alter_business_options_staffprofile_and_more.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0002_projecttype_alter_business_options_staffprofile_and_more.cpython-310.pyc
index cca61d4e..11b97a39 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0002_projecttype_alter_business_options_staffprofile_and_more.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0002_projecttype_alter_business_options_staffprofile_and_more.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0003_milestone.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0003_milestone.cpython-310.pyc
index 90cab1f3..62ef2296 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0003_milestone.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0003_milestone.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0004_epic.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0004_epic.cpython-310.pyc
index 1cb9a6c3..d887006b 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0004_epic.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0004_epic.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0005_staffprofile_image.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0005_staffprofile_image.cpython-310.pyc
index 005966db..28d201b0 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0005_staffprofile_image.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0005_staffprofile_image.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0006_note.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0006_note.cpython-310.pyc
index 8118ad34..8c666f06 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0006_note.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0006_note.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0007_project_project_id_alter_project_status.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0007_project_project_id_alter_project_status.cpython-310.pyc
index fceaf337..1322c1c2 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0007_project_project_id_alter_project_status.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0007_project_project_id_alter_project_status.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0008_alter_project_project_id.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0008_alter_project_project_id.cpython-310.pyc
index 4c909d93..56650156 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0008_alter_project_project_id.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0008_alter_project_project_id.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0009_alter_project_project_id.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0009_alter_project_project_id.cpython-310.pyc
index 7437056a..7429c8ef 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0009_alter_project_project_id.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0009_alter_project_project_id.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0010_remove_note_date.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0010_remove_note_date.cpython-310.pyc
index 9d59e118..f16784fc 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0010_remove_note_date.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0010_remove_note_date.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0011_note_date_alter_note_color_alter_note_text_and_more.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0011_note_date_alter_note_color_alter_note_text_and_more.cpython-310.pyc
index 2d301475..fe59817c 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0011_note_date_alter_note_color_alter_note_text_and_more.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0011_note_date_alter_note_color_alter_note_text_and_more.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0012_projectrequirement.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0012_projectrequirement.cpython-310.pyc
index 575e81d9..ec591dd9 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0012_projectrequirement.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0012_projectrequirement.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0013_projectfile.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0013_projectfile.cpython-310.pyc
index f2b974f2..b99dbc62 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0013_projectfile.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0013_projectfile.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0014_alter_projectfile_file.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0014_alter_projectfile_file.cpython-310.pyc
index e165ed8b..d0b4a24d 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0014_alter_projectfile_file.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0014_alter_projectfile_file.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0015_projectcredentials.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0015_projectcredentials.cpython-310.pyc
index 3c20f5bc..9a553b5c 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0015_projectcredentials.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0015_projectcredentials.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0016_rename_projectcredentials_projectcredential.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0016_rename_projectcredentials_projectcredential.cpython-310.pyc
index e1e8e4d9..e1f13dc0 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0016_rename_projectcredentials_projectcredential.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0016_rename_projectcredentials_projectcredential.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0017_alter_project_end_date_alter_project_start_date.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0017_alter_project_end_date_alter_project_start_date.cpython-310.pyc
index f584023c..37f2c329 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0017_alter_project_end_date_alter_project_start_date.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0017_alter_project_end_date_alter_project_start_date.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0018_epic_status.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0018_epic_status.cpython-310.pyc
index 88dacdfb..0623d2f1 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0018_epic_status.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0018_epic_status.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0019_alter_epic_end_date_alter_epic_start_date.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0019_alter_epic_end_date_alter_epic_start_date.cpython-310.pyc
index b65291a6..c6b15283 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0019_alter_epic_end_date_alter_epic_start_date.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0019_alter_epic_end_date_alter_epic_start_date.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0020_task.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0020_task.cpython-310.pyc
index f3568d15..512a87bf 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0020_task.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0020_task.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0021_alter_customerprofile_business_and_more.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0021_alter_customerprofile_business_and_more.cpython-310.pyc
index 53c5bf3d..62699c0a 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0021_alter_customerprofile_business_and_more.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0021_alter_customerprofile_business_and_more.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0022_customerprofile_customer_id.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0022_customerprofile_customer_id.cpython-310.pyc
index 90d649aa..790f335d 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0022_customerprofile_customer_id.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0022_customerprofile_customer_id.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0023_task_assigned_to.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0023_task_assigned_to.cpython-310.pyc
index 27fab239..e85990c4 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0023_task_assigned_to.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0023_task_assigned_to.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0024_task_task_id.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0024_task_task_id.cpython-310.pyc
index b98c8121..52c73469 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0024_task_task_id.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0024_task_task_id.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0025_status.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0025_status.cpython-310.pyc
index 9943add1..70320aeb 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0025_status.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0025_status.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0026_remove_status_user_status_staff.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0026_remove_status_user_status_staff.cpython-310.pyc
index 631c6088..67bf4f0f 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0026_remove_status_user_status_staff.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0026_remove_status_user_status_staff.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0027_alter_status_staff.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0027_alter_status_staff.cpython-310.pyc
index 190fe530..66670c33 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0027_alter_status_staff.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0027_alter_status_staff.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0028_remove_projecttype_color.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0028_remove_projecttype_color.cpython-310.pyc
index 2d041611..4e9abdc9 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0028_remove_projecttype_color.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0028_remove_projecttype_color.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0029_alter_reference_date.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0029_alter_reference_date.cpython-310.pyc
index 8f8e2c8d..2ce7dddd 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0029_alter_reference_date.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0029_alter_reference_date.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0030_tag.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0030_tag.cpython-310.pyc
index 51e41bd4..9bde2221 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0030_tag.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0030_tag.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0031_alter_staffprofile_image.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0031_alter_staffprofile_image.cpython-310.pyc
index d72eb6b2..60531a83 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0031_alter_staffprofile_image.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0031_alter_staffprofile_image.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0032_point.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0032_point.cpython-310.pyc
index b8490d9f..f447ade1 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0032_point.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0032_point.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0033_point_date_completed_point_date_workingon_and_more.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0033_point_date_completed_point_date_workingon_and_more.cpython-310.pyc
index 527f8ba5..6de336e7 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0033_point_date_completed_point_date_workingon_and_more.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0033_point_date_completed_point_date_workingon_and_more.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0034_alter_point_date_completed_and_more.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0034_alter_point_date_completed_and_more.cpython-310.pyc
index dedaf26f..7ac6789f 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0034_alter_point_date_completed_and_more.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0034_alter_point_date_completed_and_more.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0035_business_business_id.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0035_business_business_id.cpython-310.pyc
index 9bdffc17..a9531156 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0035_business_business_id.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0035_business_business_id.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0036_staffposition_alter_staffprofile_position.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0036_staffposition_alter_staffprofile_position.cpython-310.pyc
index e1d0b18b..0d1535be 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0036_staffposition_alter_staffprofile_position.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0036_staffposition_alter_staffprofile_position.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0037_remove_staffprofile_position.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0037_remove_staffprofile_position.cpython-310.pyc
index cd44f630..bbfd8ba8 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0037_remove_staffprofile_position.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0037_remove_staffprofile_position.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0038_staffprofile_staff_position.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0038_staffprofile_staff_position.cpython-310.pyc
index ff8547fe..ca01bebe 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0038_staffprofile_staff_position.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0038_staffprofile_staff_position.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0039_alter_staffprofile_staff_position.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0039_alter_staffprofile_staff_position.cpython-310.pyc
index 3e78d578..36b25d77 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0039_alter_staffprofile_staff_position.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0039_alter_staffprofile_staff_position.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0040_staffprofile_staff_id.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0040_staffprofile_staff_id.cpython-310.pyc
index 0c8e4f83..b7101d04 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0040_staffprofile_staff_id.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0040_staffprofile_staff_id.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0041_dailyreport.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0041_dailyreport.cpython-310.pyc
index f96664cd..6803a340 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0041_dailyreport.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0041_dailyreport.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0042_remove_customerprofile_email_and_more.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0042_remove_customerprofile_email_and_more.cpython-310.pyc
index 7af9eaad..68691678 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0042_remove_customerprofile_email_and_more.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0042_remove_customerprofile_email_and_more.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0043_businesstype.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0043_businesstype.cpython-310.pyc
index 97211b74..fa571661 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0043_businesstype.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0043_businesstype.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0044_remove_business_business_type.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0044_remove_business_business_type.cpython-310.pyc
index 60db062f..c663726f 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0044_remove_business_business_type.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0044_remove_business_business_type.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0045_business_type.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0045_business_type.cpython-310.pyc
index 0af638a8..b6766e10 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0045_business_type.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0045_business_type.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0046_task_requirement.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0046_task_requirement.cpython-310.pyc
index 16aae4c1..1f651bb1 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0046_task_requirement.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0046_task_requirement.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0047_task_status_date.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0047_task_status_date.cpython-310.pyc
index 5dfd8fcf..8da362bd 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0047_task_status_date.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0047_task_status_date.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0048_alter_customerprofile_business.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0048_alter_customerprofile_business.cpython-310.pyc
index 0a5fd1c6..ae5d42b7 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0048_alter_customerprofile_business.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0048_alter_customerprofile_business.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0049_alter_customerprofile_business.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0049_alter_customerprofile_business.cpython-310.pyc
index 72801dee..3dc66f53 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0049_alter_customerprofile_business.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0049_alter_customerprofile_business.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0050_projectrequirement_added_by_projectrequirement_date.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0050_projectrequirement_added_by_projectrequirement_date.cpython-310.pyc
index 3c41d5ae..a5ae9d0e 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0050_projectrequirement_added_by_projectrequirement_date.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0050_projectrequirement_added_by_projectrequirement_date.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0051_alter_task_requirement.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0051_alter_task_requirement.cpython-310.pyc
index 26a31e43..e165df7a 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0051_alter_task_requirement.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0051_alter_task_requirement.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0052_note_project.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0052_note_project.cpython-310.pyc
index b4b5ed6f..2207680b 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0052_note_project.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0052_note_project.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0053_pointactivity.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0053_pointactivity.cpython-310.pyc
index 47ce1c27..77e19603 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0053_pointactivity.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0053_pointactivity.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0054_remove_point_date_completed_and_more.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0054_remove_point_date_completed_and_more.cpython-310.pyc
index e0878822..19b2bd58 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0054_remove_point_date_completed_and_more.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0054_remove_point_date_completed_and_more.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0055_alter_point_status.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0055_alter_point_status.cpython-310.pyc
index 20f80f86..ab8b7c5b 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0055_alter_point_status.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0055_alter_point_status.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0056_alter_pointactivity_end_time.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0056_alter_pointactivity_end_time.cpython-310.pyc
index 1b1fc220..899e47d9 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0056_alter_pointactivity_end_time.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0056_alter_pointactivity_end_time.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0057_point_total_time_hours_point_total_time_minutes_and_more.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0057_point_total_time_hours_point_total_time_minutes_and_more.cpython-310.pyc
index 0d5544c5..09f2612e 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0057_point_total_time_hours_point_total_time_minutes_and_more.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0057_point_total_time_hours_point_total_time_minutes_and_more.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0058_remove_point_total_time_hours_and_more.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0058_remove_point_total_time_hours_and_more.cpython-310.pyc
index fbe196a7..4f184c34 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0058_remove_point_total_time_hours_and_more.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0058_remove_point_total_time_hours_and_more.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0059_alter_task_requirement.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0059_alter_task_requirement.cpython-310.pyc
index 84a0854c..24b0f3b9 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0059_alter_task_requirement.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0059_alter_task_requirement.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0060_pointactivity_total_time.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0060_pointactivity_total_time.cpython-310.pyc
index 8a13e1bf..dcd45e0d 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0060_pointactivity_total_time.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0060_pointactivity_total_time.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0061_alter_task_end_date_alter_task_start_date.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0061_alter_task_end_date_alter_task_start_date.cpython-310.pyc
index 453dcff2..36e51a6f 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0061_alter_task_end_date_alter_task_start_date.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0061_alter_task_end_date_alter_task_start_date.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0062_connection.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0062_connection.cpython-310.pyc
index c85f8a47..de327c8d 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0062_connection.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0062_connection.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0063_alter_connection_date.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0063_alter_connection_date.cpython-310.pyc
index 60e9e964..4704cf00 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0063_alter_connection_date.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0063_alter_connection_date.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0064_reaction.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0064_reaction.cpython-310.pyc
index cc637ff4..5a527c15 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0064_reaction.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0064_reaction.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0065_alter_customerprofile_status.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0065_alter_customerprofile_status.cpython-310.pyc
index 7203a0ca..7a0cadf3 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0065_alter_customerprofile_status.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0065_alter_customerprofile_status.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0066_remove_customerprofile_business_business_customer.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0066_remove_customerprofile_business_business_customer.cpython-310.pyc
index 1a104ec1..7668f9d0 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0066_remove_customerprofile_business_business_customer.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0066_remove_customerprofile_business_business_customer.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0067_customerprofile_confirmed.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0067_customerprofile_confirmed.cpython-310.pyc
index 1e8fe87a..9f09e4aa 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0067_customerprofile_confirmed.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0067_customerprofile_confirmed.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0068_remove_customerprofile_confirmed_and_more.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0068_remove_customerprofile_confirmed_and_more.cpython-310.pyc
index 9197b95a..d32d5420 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0068_remove_customerprofile_confirmed_and_more.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0068_remove_customerprofile_confirmed_and_more.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0069_alter_business_logo_alter_projectfile_file_and_more.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0069_alter_business_logo_alter_projectfile_file_and_more.cpython-310.pyc
index ddfc6a51..70b5caf3 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0069_alter_business_logo_alter_projectfile_file_and_more.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0069_alter_business_logo_alter_projectfile_file_and_more.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0070_department_alter_staffprofile_staff_position_and_more.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0070_department_alter_staffprofile_staff_position_and_more.cpython-310.pyc
index f9c1f9bc..3189ab3c 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0070_department_alter_staffprofile_staff_position_and_more.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0070_department_alter_staffprofile_staff_position_and_more.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0071_projecttype_department_ticket.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0071_projecttype_department_ticket.cpython-310.pyc
index a6267c2f..4ab07da7 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0071_projecttype_department_ticket.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0071_projecttype_department_ticket.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0072_ticketupdate_ticketreaction_ticketattachment.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0072_ticketupdate_ticketreaction_ticketattachment.cpython-310.pyc
index 74138caf..df4cf6d4 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0072_ticketupdate_ticketreaction_ticketattachment.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0072_ticketupdate_ticketreaction_ticketattachment.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0073_alter_ticket_regarding.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0073_alter_ticket_regarding.cpython-310.pyc
index fce9fa99..799aa710 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0073_alter_ticket_regarding.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0073_alter_ticket_regarding.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0074_rename_dare_added_ticketupdate_date_added.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0074_rename_dare_added_ticketupdate_date_added.cpython-310.pyc
index 4267b323..6a666d60 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0074_rename_dare_added_ticketupdate_date_added.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0074_rename_dare_added_ticketupdate_date_added.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0075_remove_ticketattachment_ticket_and_more.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0075_remove_ticketattachment_ticket_and_more.cpython-310.pyc
index e7afd02f..3fa3bc76 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0075_remove_ticketattachment_ticket_and_more.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0075_remove_ticketattachment_ticket_and_more.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0076_alter_reference_date.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0076_alter_reference_date.cpython-310.pyc
index 628be6de..833053bd 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0076_alter_reference_date.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0076_alter_reference_date.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0077_remove_project_status_project_active_projectstatus.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0077_remove_project_status_project_active_projectstatus.cpython-310.pyc
index 43666596..00b634c4 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0077_remove_project_status_project_active_projectstatus.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0077_remove_project_status_project_active_projectstatus.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0078_alter_projectstatus_status.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0078_alter_projectstatus_status.cpython-310.pyc
index 7e3f9f26..2171c66e 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0078_alter_projectstatus_status.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0078_alter_projectstatus_status.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0079_alter_project_end_date_alter_project_start_date.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0079_alter_project_end_date_alter_project_start_date.cpython-310.pyc
index fd81cfd1..bc4bf2c3 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0079_alter_project_end_date_alter_project_start_date.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0079_alter_project_end_date_alter_project_start_date.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0080_project_logo.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0080_project_logo.cpython-310.pyc
index c1e8c331..6d9204e4 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0080_project_logo.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0080_project_logo.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/0081_status_task.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/0081_status_task.cpython-310.pyc
index 7593e6e8..d0f5d7e9 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/0081_status_task.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/0081_status_task.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/migrations/__pycache__/__init__.cpython-310.pyc b/osinaweb/osinacore/migrations/__pycache__/__init__.cpython-310.pyc
index 8339fd53..a61519cb 100644
Binary files a/osinaweb/osinacore/migrations/__pycache__/__init__.cpython-310.pyc and b/osinaweb/osinacore/migrations/__pycache__/__init__.cpython-310.pyc differ
diff --git a/osinaweb/osinacore/templates/customer_index.html b/osinaweb/osinacore/templates/customer_index.html
index 41f048f8..6496a23e 100644
--- a/osinaweb/osinacore/templates/customer_index.html
+++ b/osinaweb/osinacore/templates/customer_index.html
@@ -107,12 +107,12 @@
- {{ticket.last_update_date_added}}
+ {{ticket.ticketupdate_set.last.date_added}}
|
- {{ticket.last_update_added_by}}
+ {{ticket.ticketupdate_set.last.added_by.first_name}}
|
diff --git a/osinaweb/osinacore/templates/listing_pages/tickets.html b/osinaweb/osinacore/templates/listing_pages/tickets.html
index 8b76e4ba..c5807953 100644
--- a/osinaweb/osinacore/templates/listing_pages/tickets.html
+++ b/osinaweb/osinacore/templates/listing_pages/tickets.html
@@ -86,11 +86,11 @@
|
- {{ticket.last_update_date_added}}
+ {{ticket.ticketupdate_set.all.last.date_added}}
|
- {{ticket.last_update_added_by}}
+ {{ticket.ticketupdate_set.all.last.added_by.first_name}}
|
@@ -198,27 +198,31 @@
|
- {{ticket.last_update_date_added}}
+ {{ticket.ticketupdate_set.all.last.date_added}}
|
- {{ticket.last_update_added_by}}
+ {{ticket.ticketupdate_set.all.last.added_by.first_name}}
|
|
diff --git a/osinaweb/osinacore/views.py b/osinaweb/osinacore/views.py
index e38cf624..d3bfcad7 100644
--- a/osinaweb/osinacore/views.py
+++ b/osinaweb/osinacore/views.py
@@ -348,42 +348,51 @@ def my_tasks(request, *args, **kwargs):
@staff_login_required
def tickets(request, *args, **kwargs):
if request.user.is_superuser:
- open_tickets = Ticket.objects.filter(status__in=['Open', 'Working On'])
- closed_tickets = Ticket.objects.filter(status__in=['Closed'])
+ all_tickets = Ticket.objects.all()
+ all_tickets_with_update_date = all_tickets.annotate(
+ latest_update_date=Max('ticketupdate__date_added'))
+ all_tickets_ordered = all_tickets_with_update_date.order_by('-latest_update_date')
+ open_tickets = []
+ closed_tickets = []
+ for ticket in all_tickets_ordered:
+ last_status = ticket.ticketstatus_set.last()
+ if last_status:
+ last_status = last_status.status
+ if last_status == 'Closed':
+ closed_tickets.append(ticket)
+ else:
+ open_tickets.append(ticket)
+ else:
+ # If no status is found, assume it's open
+ open_tickets.append(ticket)
else:
- open_tickets = Ticket.objects.filter(status__in=['Open', 'Working On'], department=request.user.staffprofile.staff_position.department)
- closed_tickets = Ticket.objects.filter(status__in=['Closed'], department=request.user.staffprofile.staff_position.department)
+ all_tickets = Ticket.objects.filter(departments__in=request.user.staffprofile.staffposition.department)
+ all_tickets_with_update_date = all_tickets.annotate(
+ latest_update_date=Max('ticketupdate__date_added'))
+ all_tickets_ordered = all_tickets_with_update_date.order_by('-latest_update_date')
+ open_tickets = []
+ closed_tickets = []
+ for ticket in all_tickets_ordered:
+ last_status = ticket.ticketstatus_set.last()
+ if last_status:
+ last_status = last_status.status
+ if last_status == 'Closed':
+ closed_tickets.append(ticket)
+ else:
+ open_tickets.append(ticket)
+ else:
+ # If no status is found, assume it's open
+ open_tickets.append(ticket)
for ticket in open_tickets:
unread_updates_count = 0
- last_update = ticket.ticketupdate_set.exclude(added_by=request.user).order_by('-date_added').first()
- if last_update:
- last_update_added_by = last_update.added_by.first_name
- last_update_date_added = last_update.date_added
- else:
- last_update_added_by = None
- last_update_date_added = None
-
for ticket_update in ticket.ticketupdate_set.exclude(added_by=request.user):
if not TicketRead.objects.filter(ticket_update=ticket_update, user=request.user, read=True).exists():
unread_updates_count += 1
ticket.unread_updates_count = unread_updates_count
- ticket.last_update_added_by = last_update_added_by
- ticket.last_update_date_added = last_update_date_added
-
- for ticket in closed_tickets:
- last_update = ticket.ticketupdate_set.order_by('-date_added').first()
- if last_update:
- last_update_added_by = last_update.added_by
- last_update_date_added = last_update.date_added
- else:
- last_update_added_by = None
- last_update_date_added = None
- ticket.last_update_added_by = last_update_added_by
- ticket.last_update_date_added = last_update_date_added
-
+
context = {
'open_tickets': open_tickets,
'closed_tickets': closed_tickets
diff --git a/osinaweb/osinaweb/__pycache__/__init__.cpython-310.pyc b/osinaweb/osinaweb/__pycache__/__init__.cpython-310.pyc
index eed5eb07..8cedfe09 100644
Binary files a/osinaweb/osinaweb/__pycache__/__init__.cpython-310.pyc and b/osinaweb/osinaweb/__pycache__/__init__.cpython-310.pyc differ
diff --git a/osinaweb/osinaweb/__pycache__/settings.cpython-310.pyc b/osinaweb/osinaweb/__pycache__/settings.cpython-310.pyc
index bafee41c..6734c538 100644
Binary files a/osinaweb/osinaweb/__pycache__/settings.cpython-310.pyc and b/osinaweb/osinaweb/__pycache__/settings.cpython-310.pyc differ
diff --git a/osinaweb/osinaweb/__pycache__/urls.cpython-310.pyc b/osinaweb/osinaweb/__pycache__/urls.cpython-310.pyc
index 00932899..3b82259a 100644
Binary files a/osinaweb/osinaweb/__pycache__/urls.cpython-310.pyc and b/osinaweb/osinaweb/__pycache__/urls.cpython-310.pyc differ
diff --git a/osinaweb/osinaweb/__pycache__/wsgi.cpython-310.pyc b/osinaweb/osinaweb/__pycache__/wsgi.cpython-310.pyc
index e792eddb..a72140d0 100644
Binary files a/osinaweb/osinaweb/__pycache__/wsgi.cpython-310.pyc and b/osinaweb/osinaweb/__pycache__/wsgi.cpython-310.pyc differ