diff --git a/.DS_Store b/.DS_Store index d871cc6b..42d79eaf 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/osinaweb/.DS_Store b/osinaweb/.DS_Store index 3d883be0..23864b77 100644 Binary files a/osinaweb/.DS_Store and b/osinaweb/.DS_Store differ diff --git a/osinaweb/addressbook/__pycache__/__init__.cpython-313.pyc b/osinaweb/addressbook/__pycache__/__init__.cpython-313.pyc index 07afa8e6..e1e347d6 100644 Binary files a/osinaweb/addressbook/__pycache__/__init__.cpython-313.pyc and b/osinaweb/addressbook/__pycache__/__init__.cpython-313.pyc differ diff --git a/osinaweb/addressbook/__pycache__/admin.cpython-313.pyc b/osinaweb/addressbook/__pycache__/admin.cpython-313.pyc index 62b543ca..1fc77bee 100644 Binary files a/osinaweb/addressbook/__pycache__/admin.cpython-313.pyc and b/osinaweb/addressbook/__pycache__/admin.cpython-313.pyc differ diff --git a/osinaweb/addressbook/__pycache__/apps.cpython-313.pyc b/osinaweb/addressbook/__pycache__/apps.cpython-313.pyc index 625cbb6c..7dd417b8 100644 Binary files a/osinaweb/addressbook/__pycache__/apps.cpython-313.pyc and b/osinaweb/addressbook/__pycache__/apps.cpython-313.pyc differ diff --git a/osinaweb/addressbook/__pycache__/models.cpython-313.pyc b/osinaweb/addressbook/__pycache__/models.cpython-313.pyc index 54379fe9..71bea67d 100644 Binary files a/osinaweb/addressbook/__pycache__/models.cpython-313.pyc and b/osinaweb/addressbook/__pycache__/models.cpython-313.pyc differ diff --git a/osinaweb/addressbook/migrations/__pycache__/0001_initial.cpython-313.pyc b/osinaweb/addressbook/migrations/__pycache__/0001_initial.cpython-313.pyc index ac21dd4f..bfdb9108 100644 Binary files a/osinaweb/addressbook/migrations/__pycache__/0001_initial.cpython-313.pyc and b/osinaweb/addressbook/migrations/__pycache__/0001_initial.cpython-313.pyc differ diff --git a/osinaweb/addressbook/migrations/__pycache__/0002_country_addressbook.cpython-313.pyc b/osinaweb/addressbook/migrations/__pycache__/0002_country_addressbook.cpython-313.pyc index efa4a632..cba3e329 100644 Binary files a/osinaweb/addressbook/migrations/__pycache__/0002_country_addressbook.cpython-313.pyc and b/osinaweb/addressbook/migrations/__pycache__/0002_country_addressbook.cpython-313.pyc differ diff --git a/osinaweb/addressbook/migrations/__pycache__/0003_contact.cpython-313.pyc b/osinaweb/addressbook/migrations/__pycache__/0003_contact.cpython-313.pyc index 138ae219..2bb55010 100644 Binary files a/osinaweb/addressbook/migrations/__pycache__/0003_contact.cpython-313.pyc and b/osinaweb/addressbook/migrations/__pycache__/0003_contact.cpython-313.pyc differ diff --git a/osinaweb/addressbook/migrations/__pycache__/0004_socialmedia.cpython-313.pyc b/osinaweb/addressbook/migrations/__pycache__/0004_socialmedia.cpython-313.pyc index 2b5d6885..d5af8138 100644 Binary files a/osinaweb/addressbook/migrations/__pycache__/0004_socialmedia.cpython-313.pyc and b/osinaweb/addressbook/migrations/__pycache__/0004_socialmedia.cpython-313.pyc differ diff --git a/osinaweb/addressbook/migrations/__pycache__/0005_socialmedia_addressbook.cpython-313.pyc b/osinaweb/addressbook/migrations/__pycache__/0005_socialmedia_addressbook.cpython-313.pyc index bd827ca3..6693f8dd 100644 Binary files a/osinaweb/addressbook/migrations/__pycache__/0005_socialmedia_addressbook.cpython-313.pyc and b/osinaweb/addressbook/migrations/__pycache__/0005_socialmedia_addressbook.cpython-313.pyc differ diff --git a/osinaweb/addressbook/migrations/__pycache__/0006_comment_prospectinglist_prospectinglistitem.cpython-313.pyc b/osinaweb/addressbook/migrations/__pycache__/0006_comment_prospectinglist_prospectinglistitem.cpython-313.pyc index 5553b175..cdcacb7f 100644 Binary files a/osinaweb/addressbook/migrations/__pycache__/0006_comment_prospectinglist_prospectinglistitem.cpython-313.pyc and b/osinaweb/addressbook/migrations/__pycache__/0006_comment_prospectinglist_prospectinglistitem.cpython-313.pyc differ diff --git a/osinaweb/addressbook/migrations/__pycache__/0007_prospectinglistitem_comments.cpython-313.pyc b/osinaweb/addressbook/migrations/__pycache__/0007_prospectinglistitem_comments.cpython-313.pyc index 9324e5fd..8de71f5d 100644 Binary files a/osinaweb/addressbook/migrations/__pycache__/0007_prospectinglistitem_comments.cpython-313.pyc and b/osinaweb/addressbook/migrations/__pycache__/0007_prospectinglistitem_comments.cpython-313.pyc differ diff --git a/osinaweb/addressbook/migrations/__pycache__/__init__.cpython-313.pyc b/osinaweb/addressbook/migrations/__pycache__/__init__.cpython-313.pyc index 08550c12..b5938600 100644 Binary files a/osinaweb/addressbook/migrations/__pycache__/__init__.cpython-313.pyc and b/osinaweb/addressbook/migrations/__pycache__/__init__.cpython-313.pyc differ diff --git a/osinaweb/authentication/__pycache__/__init__.cpython-313.pyc b/osinaweb/authentication/__pycache__/__init__.cpython-313.pyc index c770d975..0cf973ca 100644 Binary files a/osinaweb/authentication/__pycache__/__init__.cpython-313.pyc and b/osinaweb/authentication/__pycache__/__init__.cpython-313.pyc differ diff --git a/osinaweb/authentication/__pycache__/models.cpython-313.pyc b/osinaweb/authentication/__pycache__/models.cpython-313.pyc index 49673f56..31d43aad 100644 Binary files a/osinaweb/authentication/__pycache__/models.cpython-313.pyc and b/osinaweb/authentication/__pycache__/models.cpython-313.pyc differ diff --git a/osinaweb/billing/__pycache__/__init__.cpython-313.pyc b/osinaweb/billing/__pycache__/__init__.cpython-313.pyc index 280a4a0b..8499f1c0 100644 Binary files a/osinaweb/billing/__pycache__/__init__.cpython-313.pyc and b/osinaweb/billing/__pycache__/__init__.cpython-313.pyc differ diff --git a/osinaweb/billing/__pycache__/admin.cpython-313.pyc b/osinaweb/billing/__pycache__/admin.cpython-313.pyc index 605505fe..6ff77493 100644 Binary files a/osinaweb/billing/__pycache__/admin.cpython-313.pyc and b/osinaweb/billing/__pycache__/admin.cpython-313.pyc differ diff --git a/osinaweb/billing/__pycache__/apps.cpython-313.pyc b/osinaweb/billing/__pycache__/apps.cpython-313.pyc index 072715e6..36b6bc9b 100644 Binary files a/osinaweb/billing/__pycache__/apps.cpython-313.pyc and b/osinaweb/billing/__pycache__/apps.cpython-313.pyc differ diff --git a/osinaweb/billing/__pycache__/models.cpython-313.pyc b/osinaweb/billing/__pycache__/models.cpython-313.pyc index bd1ca390..41e07404 100644 Binary files a/osinaweb/billing/__pycache__/models.cpython-313.pyc and b/osinaweb/billing/__pycache__/models.cpython-313.pyc differ diff --git a/osinaweb/billing/__pycache__/urls.cpython-313.pyc b/osinaweb/billing/__pycache__/urls.cpython-313.pyc index f815be50..bf5ffb9e 100644 Binary files a/osinaweb/billing/__pycache__/urls.cpython-313.pyc and b/osinaweb/billing/__pycache__/urls.cpython-313.pyc differ diff --git a/osinaweb/billing/__pycache__/views.cpython-313.pyc b/osinaweb/billing/__pycache__/views.cpython-313.pyc index 2715135f..ba49113c 100644 Binary files a/osinaweb/billing/__pycache__/views.cpython-313.pyc and b/osinaweb/billing/__pycache__/views.cpython-313.pyc differ diff --git a/osinaweb/billing/add/__pycache__/urls.cpython-313.pyc b/osinaweb/billing/add/__pycache__/urls.cpython-313.pyc index df930d9a..f77a2157 100644 Binary files a/osinaweb/billing/add/__pycache__/urls.cpython-313.pyc and b/osinaweb/billing/add/__pycache__/urls.cpython-313.pyc differ diff --git a/osinaweb/billing/add/__pycache__/views.cpython-313.pyc b/osinaweb/billing/add/__pycache__/views.cpython-313.pyc index e351f172..ea3bc36f 100644 Binary files a/osinaweb/billing/add/__pycache__/views.cpython-313.pyc and b/osinaweb/billing/add/__pycache__/views.cpython-313.pyc differ diff --git a/osinaweb/billing/delete/__pycache__/urls.cpython-313.pyc b/osinaweb/billing/delete/__pycache__/urls.cpython-313.pyc index c5f7bc28..67eeecde 100644 Binary files a/osinaweb/billing/delete/__pycache__/urls.cpython-313.pyc and b/osinaweb/billing/delete/__pycache__/urls.cpython-313.pyc differ diff --git a/osinaweb/billing/delete/__pycache__/views.cpython-313.pyc b/osinaweb/billing/delete/__pycache__/views.cpython-313.pyc index eaed1c7c..738444fa 100644 Binary files a/osinaweb/billing/delete/__pycache__/views.cpython-313.pyc and b/osinaweb/billing/delete/__pycache__/views.cpython-313.pyc differ diff --git a/osinaweb/billing/edit/__pycache__/urls.cpython-313.pyc b/osinaweb/billing/edit/__pycache__/urls.cpython-313.pyc index 2721852b..20ceac86 100644 Binary files a/osinaweb/billing/edit/__pycache__/urls.cpython-313.pyc and b/osinaweb/billing/edit/__pycache__/urls.cpython-313.pyc differ diff --git a/osinaweb/billing/edit/__pycache__/views.cpython-313.pyc b/osinaweb/billing/edit/__pycache__/views.cpython-313.pyc index ef86aaec..6c1ea01f 100644 Binary files a/osinaweb/billing/edit/__pycache__/views.cpython-313.pyc and b/osinaweb/billing/edit/__pycache__/views.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0001_initial.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0001_initial.cpython-313.pyc index 5537cf1e..c1ccefbd 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0001_initial.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0001_initial.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0002_service_active_service_cancelled_at_and_more.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0002_service_active_service_cancelled_at_and_more.cpython-313.pyc index 83f180bf..7de67eb7 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0002_service_active_service_cancelled_at_and_more.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0002_service_active_service_cancelled_at_and_more.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0003_payment_servicepayment.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0003_payment_servicepayment.cpython-313.pyc index 158b8023..cf353734 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0003_payment_servicepayment.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0003_payment_servicepayment.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0004_rename_payment_paymenttype.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0004_rename_payment_paymenttype.cpython-313.pyc index 3011f2e5..18828cd0 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0004_rename_payment_paymenttype.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0004_rename_payment_paymenttype.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0005_service_recurring_cycle.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0005_service_recurring_cycle.cpython-313.pyc index f389696f..f2f3c7e2 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0005_service_recurring_cycle.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0005_service_recurring_cycle.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0006_alter_service_cancelled_at_alter_service_created_at_and_more.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0006_alter_service_cancelled_at_alter_service_created_at_and_more.cpython-313.pyc index f2228273..2a868ba7 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0006_alter_service_cancelled_at_alter_service_created_at_and_more.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0006_alter_service_cancelled_at_alter_service_created_at_and_more.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0007_alter_service_recurring_cycle.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0007_alter_service_recurring_cycle.cpython-313.pyc index a4931d3c..48c19da6 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0007_alter_service_recurring_cycle.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0007_alter_service_recurring_cycle.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0008_alter_service_type.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0008_alter_service_type.cpython-313.pyc index 2dec751f..4c41a62b 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0008_alter_service_type.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0008_alter_service_type.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0009_remove_service_due_at_remove_servicepayment_service_and_more.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0009_remove_service_due_at_remove_servicepayment_service_and_more.cpython-313.pyc index e23e45ff..bdffa913 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0009_remove_service_due_at_remove_servicepayment_service_and_more.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0009_remove_service_due_at_remove_servicepayment_service_and_more.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0010_charge_amount.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0010_charge_amount.cpython-313.pyc index 69a10c99..4dd33f8b 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0010_charge_amount.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0010_charge_amount.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0011_invoice.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0011_invoice.cpython-313.pyc index 7153eea2..848708fb 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0011_invoice.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0011_invoice.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0012_remove_servicepayment_charge_receipt_and_more.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0012_remove_servicepayment_charge_receipt_and_more.cpython-313.pyc index 8333611b..313ea81c 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0012_remove_servicepayment_charge_receipt_and_more.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0012_remove_servicepayment_charge_receipt_and_more.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0013_alter_invoice_date_created.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0013_alter_invoice_date_created.cpython-313.pyc index 2b3d4fcc..1c518f75 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0013_alter_invoice_date_created.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0013_alter_invoice_date_created.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0014_servicepayment_comment.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0014_servicepayment_comment.cpython-313.pyc index d1ebac32..b0178b2b 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0014_servicepayment_comment.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0014_servicepayment_comment.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0015_order.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0015_order.cpython-313.pyc index 739de1ec..c0cbebf2 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0015_order.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0015_order.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0016_alter_order_status.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0016_alter_order_status.cpython-313.pyc index a0a4c58a..65e6660b 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0016_alter_order_status.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0016_alter_order_status.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0017_service_order.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0017_service_order.cpython-313.pyc index 98041bd4..d9960933 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0017_service_order.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0017_service_order.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0018_alter_order_status.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0018_alter_order_status.cpython-313.pyc index 9aa1ce4f..7acca85a 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0018_alter_order_status.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0018_alter_order_status.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0019_item_orderpayment_remove_service_customer_and_more.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0019_item_orderpayment_remove_service_customer_and_more.cpython-313.pyc index 2c6bff8c..cb4942d1 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0019_item_orderpayment_remove_service_customer_and_more.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0019_item_orderpayment_remove_service_customer_and_more.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0020_orderitem.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0020_orderitem.cpython-313.pyc index 9d9f1a95..33150d9e 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0020_orderitem.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0020_orderitem.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0021_remove_item_recurring_cycle_and_more.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0021_remove_item_recurring_cycle_and_more.cpython-313.pyc index fc7d5905..f9275c0d 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0021_remove_item_recurring_cycle_and_more.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0021_remove_item_recurring_cycle_and_more.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0022_remove_item_cancelled_at_remove_item_created_at_and_more.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0022_remove_item_cancelled_at_remove_item_created_at_and_more.cpython-313.pyc index 10020e7a..daaa42bf 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0022_remove_item_cancelled_at_remove_item_created_at_and_more.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0022_remove_item_cancelled_at_remove_item_created_at_and_more.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0023_alter_item_project_alter_item_type.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0023_alter_item_project_alter_item_type.cpython-313.pyc index 63071a77..3ad82563 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0023_alter_item_project_alter_item_type.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0023_alter_item_project_alter_item_type.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0024_remove_item_active.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0024_remove_item_active.cpython-313.pyc index 3ad4f393..2a2cbcdc 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0024_remove_item_active.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0024_remove_item_active.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0025_remove_item_project_item_customer.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0025_remove_item_project_item_customer.cpython-313.pyc index 28febf1f..7c867900 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0025_remove_item_project_item_customer.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0025_remove_item_project_item_customer.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0026_rename_type_item_item_type_remove_order_paid.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0026_rename_type_item_item_type_remove_order_paid.cpython-313.pyc index 53302994..428d03cc 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0026_rename_type_item_item_type_remove_order_paid.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0026_rename_type_item_item_type_remove_order_paid.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0027_item_type.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0027_item_type.cpython-313.pyc index ed9eef90..e4378473 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0027_item_type.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0027_item_type.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0028_remove_order_due_date.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0028_remove_order_due_date.cpython-313.pyc index a25d2242..d6fc175f 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0028_remove_order_due_date.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0028_remove_order_due_date.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0029_invoice_pdf.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0029_invoice_pdf.cpython-313.pyc index 78d2dfb6..03894ddb 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0029_invoice_pdf.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0029_invoice_pdf.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0030_alter_invoice_order.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0030_alter_invoice_order.cpython-313.pyc index 040a739c..6381f735 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0030_alter_invoice_order.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0030_alter_invoice_order.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0031_alter_invoice_invoice_number.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0031_alter_invoice_invoice_number.cpython-313.pyc index 57021efe..2cd1d1df 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0031_alter_invoice_invoice_number.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0031_alter_invoice_invoice_number.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0032_order_business.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0032_order_business.cpython-313.pyc index fa876664..da784114 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0032_order_business.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0032_order_business.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0033_alter_order_status.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0033_alter_order_status.cpython-313.pyc index 396b3d0c..f4569a3b 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0033_alter_order_status.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0033_alter_order_status.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0034_alter_invoice_pdf.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0034_alter_invoice_pdf.cpython-313.pyc index 5553ff37..c06e7394 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0034_alter_invoice_pdf.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0034_alter_invoice_pdf.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0035_alter_invoice_pdf.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0035_alter_invoice_pdf.cpython-313.pyc index cfb27dce..e86beaa6 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0035_alter_invoice_pdf.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0035_alter_invoice_pdf.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0036_alter_invoice_invoice_number.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0036_alter_invoice_invoice_number.cpython-313.pyc index f8319633..957b8de9 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0036_alter_invoice_invoice_number.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0036_alter_invoice_invoice_number.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0037_recurringcycle_item.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0037_recurringcycle_item.cpython-313.pyc index 4764145e..234be1e2 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0037_recurringcycle_item.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0037_recurringcycle_item.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0038_alter_invoice_pdf.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0038_alter_invoice_pdf.cpython-313.pyc index 87aeff3f..2decfa0e 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0038_alter_invoice_pdf.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0038_alter_invoice_pdf.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0039_recurringcycle_cycle_price.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0039_recurringcycle_cycle_price.cpython-313.pyc index ab9a3118..8b505055 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0039_recurringcycle_cycle_price.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0039_recurringcycle_cycle_price.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0040_rename_due_at_orderitem_end_at_and_more.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0040_rename_due_at_orderitem_end_at_and_more.cpython-313.pyc index 36e4b231..43106e45 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0040_rename_due_at_orderitem_end_at_and_more.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0040_rename_due_at_orderitem_end_at_and_more.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0041_orderitem_active.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0041_orderitem_active.cpython-313.pyc index ebf82cfa..a5ceb0e3 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0041_orderitem_active.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0041_orderitem_active.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0042_order_due_date.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0042_order_due_date.cpython-313.pyc index 3c80d129..7da62572 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0042_order_due_date.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0042_order_due_date.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0043_alter_invoice_pdf.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0043_alter_invoice_pdf.cpython-313.pyc index af37b996..58f6e812 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0043_alter_invoice_pdf.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0043_alter_invoice_pdf.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0044_alter_orderitem_active.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0044_alter_orderitem_active.cpython-313.pyc index fa06feac..35a26346 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0044_alter_orderitem_active.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0044_alter_orderitem_active.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0045_orderpayment_date_due_alter_orderpayment_date_paid.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0045_orderpayment_date_due_alter_orderpayment_date_paid.cpython-313.pyc index 20d15fd8..a2ae8227 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0045_orderpayment_date_due_alter_orderpayment_date_paid.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0045_orderpayment_date_due_alter_orderpayment_date_paid.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0046_remove_orderpayment_order_orderpayment_order.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0046_remove_orderpayment_order_orderpayment_order.cpython-313.pyc index 8f19c6d0..56e82993 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0046_remove_orderpayment_order_orderpayment_order.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0046_remove_orderpayment_order_orderpayment_order.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0047_paymenttype_description_paymenttype_image.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0047_paymenttype_description_paymenttype_image.cpython-313.pyc index ba95358a..c5ef2027 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0047_paymenttype_description_paymenttype_image.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0047_paymenttype_description_paymenttype_image.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0048_remove_order_status_orderstatus.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0048_remove_order_status_orderstatus.cpython-313.pyc index da550ad5..b083e60b 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0048_remove_order_status_orderstatus.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0048_remove_order_status_orderstatus.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0049_rename_due_date_order_date.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0049_rename_due_date_order_date.cpython-313.pyc index ace185e9..49aa94dc 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0049_rename_due_date_order_date.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0049_rename_due_date_order_date.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0050_remove_orderpayment_type_orderpayment_type.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0050_remove_orderpayment_type_orderpayment_type.cpython-313.pyc index 83bff77e..28f94b41 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0050_remove_orderpayment_type_orderpayment_type.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0050_remove_orderpayment_type_orderpayment_type.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0051_alter_orderpayment_amount.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0051_alter_orderpayment_amount.cpython-313.pyc index c8d1a488..65c020cd 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0051_alter_orderpayment_amount.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0051_alter_orderpayment_amount.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0052_alter_orderstatus_status.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0052_alter_orderstatus_status.cpython-313.pyc index 99d7e24c..d5cac9ca 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0052_alter_orderstatus_status.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0052_alter_orderstatus_status.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/0053_item_photo.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/0053_item_photo.cpython-313.pyc index d5be92e1..4ab3bb73 100644 Binary files a/osinaweb/billing/migrations/__pycache__/0053_item_photo.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/0053_item_photo.cpython-313.pyc differ diff --git a/osinaweb/billing/migrations/__pycache__/__init__.cpython-313.pyc b/osinaweb/billing/migrations/__pycache__/__init__.cpython-313.pyc index 439a1143..1d613178 100644 Binary files a/osinaweb/billing/migrations/__pycache__/__init__.cpython-313.pyc and b/osinaweb/billing/migrations/__pycache__/__init__.cpython-313.pyc differ diff --git a/osinaweb/customercore/__pycache__/__init__.cpython-313.pyc b/osinaweb/customercore/__pycache__/__init__.cpython-313.pyc index 7123fa3e..0e3014bb 100644 Binary files a/osinaweb/customercore/__pycache__/__init__.cpython-313.pyc and b/osinaweb/customercore/__pycache__/__init__.cpython-313.pyc differ diff --git a/osinaweb/customercore/__pycache__/admin.cpython-313.pyc b/osinaweb/customercore/__pycache__/admin.cpython-313.pyc index 1431d24f..3cec3840 100644 Binary files a/osinaweb/customercore/__pycache__/admin.cpython-313.pyc and b/osinaweb/customercore/__pycache__/admin.cpython-313.pyc differ diff --git a/osinaweb/customercore/__pycache__/apps.cpython-313.pyc b/osinaweb/customercore/__pycache__/apps.cpython-313.pyc index 357eeadf..b8119459 100644 Binary files a/osinaweb/customercore/__pycache__/apps.cpython-313.pyc and b/osinaweb/customercore/__pycache__/apps.cpython-313.pyc differ diff --git a/osinaweb/customercore/__pycache__/decorators.cpython-313.pyc b/osinaweb/customercore/__pycache__/decorators.cpython-313.pyc index d2cd780e..d53ca496 100644 Binary files a/osinaweb/customercore/__pycache__/decorators.cpython-313.pyc and b/osinaweb/customercore/__pycache__/decorators.cpython-313.pyc differ diff --git a/osinaweb/customercore/__pycache__/models.cpython-313.pyc b/osinaweb/customercore/__pycache__/models.cpython-313.pyc index 6c4f7a80..c8360d24 100644 Binary files a/osinaweb/customercore/__pycache__/models.cpython-313.pyc and b/osinaweb/customercore/__pycache__/models.cpython-313.pyc differ diff --git a/osinaweb/customercore/__pycache__/urls.cpython-313.pyc b/osinaweb/customercore/__pycache__/urls.cpython-313.pyc index 7b80637c..117320bc 100644 Binary files a/osinaweb/customercore/__pycache__/urls.cpython-313.pyc and b/osinaweb/customercore/__pycache__/urls.cpython-313.pyc differ diff --git a/osinaweb/customercore/__pycache__/views.cpython-313.pyc b/osinaweb/customercore/__pycache__/views.cpython-313.pyc index 6bedf5f9..f180021f 100644 Binary files a/osinaweb/customercore/__pycache__/views.cpython-313.pyc and b/osinaweb/customercore/__pycache__/views.cpython-313.pyc differ diff --git a/osinaweb/customercore/add/__pycache__/urls.cpython-313.pyc b/osinaweb/customercore/add/__pycache__/urls.cpython-313.pyc index 8860f9de..515b5f2f 100644 Binary files a/osinaweb/customercore/add/__pycache__/urls.cpython-313.pyc and b/osinaweb/customercore/add/__pycache__/urls.cpython-313.pyc differ diff --git a/osinaweb/customercore/add/__pycache__/views.cpython-313.pyc b/osinaweb/customercore/add/__pycache__/views.cpython-313.pyc index ae0e457f..e5b561af 100644 Binary files a/osinaweb/customercore/add/__pycache__/views.cpython-313.pyc and b/osinaweb/customercore/add/__pycache__/views.cpython-313.pyc differ diff --git a/osinaweb/customercore/migrations/__pycache__/0001_initial.cpython-313.pyc b/osinaweb/customercore/migrations/__pycache__/0001_initial.cpython-313.pyc index 4b3d7d5c..1f2c205e 100644 Binary files a/osinaweb/customercore/migrations/__pycache__/0001_initial.cpython-313.pyc and b/osinaweb/customercore/migrations/__pycache__/0001_initial.cpython-313.pyc differ diff --git a/osinaweb/customercore/migrations/__pycache__/0002_alter_ticket_department.cpython-313.pyc b/osinaweb/customercore/migrations/__pycache__/0002_alter_ticket_department.cpython-313.pyc index 56d98dff..af09e7ce 100644 Binary files a/osinaweb/customercore/migrations/__pycache__/0002_alter_ticket_department.cpython-313.pyc and b/osinaweb/customercore/migrations/__pycache__/0002_alter_ticket_department.cpython-313.pyc differ diff --git a/osinaweb/customercore/migrations/__pycache__/0003_ticket_customer_ticket_status_and_more.cpython-313.pyc b/osinaweb/customercore/migrations/__pycache__/0003_ticket_customer_ticket_status_and_more.cpython-313.pyc index 1e3ade0f..5ca3b150 100644 Binary files a/osinaweb/customercore/migrations/__pycache__/0003_ticket_customer_ticket_status_and_more.cpython-313.pyc and b/osinaweb/customercore/migrations/__pycache__/0003_ticket_customer_ticket_status_and_more.cpython-313.pyc differ diff --git a/osinaweb/customercore/migrations/__pycache__/0004_ticket_ticket_number_and_more.cpython-313.pyc b/osinaweb/customercore/migrations/__pycache__/0004_ticket_ticket_number_and_more.cpython-313.pyc index ba9d4789..6bd4d428 100644 Binary files a/osinaweb/customercore/migrations/__pycache__/0004_ticket_ticket_number_and_more.cpython-313.pyc and b/osinaweb/customercore/migrations/__pycache__/0004_ticket_ticket_number_and_more.cpython-313.pyc differ diff --git a/osinaweb/customercore/migrations/__pycache__/0005_ticketstatusupdate.cpython-313.pyc b/osinaweb/customercore/migrations/__pycache__/0005_ticketstatusupdate.cpython-313.pyc index 952a996d..c630fe97 100644 Binary files a/osinaweb/customercore/migrations/__pycache__/0005_ticketstatusupdate.cpython-313.pyc and b/osinaweb/customercore/migrations/__pycache__/0005_ticketstatusupdate.cpython-313.pyc differ diff --git a/osinaweb/customercore/migrations/__pycache__/0006_ticketupdate_read.cpython-313.pyc b/osinaweb/customercore/migrations/__pycache__/0006_ticketupdate_read.cpython-313.pyc index b38352ea..b4ffebfd 100644 Binary files a/osinaweb/customercore/migrations/__pycache__/0006_ticketupdate_read.cpython-313.pyc and b/osinaweb/customercore/migrations/__pycache__/0006_ticketupdate_read.cpython-313.pyc differ diff --git a/osinaweb/customercore/migrations/__pycache__/0007_remove_ticketupdate_read_ticketupdatereadstatus.cpython-313.pyc b/osinaweb/customercore/migrations/__pycache__/0007_remove_ticketupdate_read_ticketupdatereadstatus.cpython-313.pyc index ed49c25c..e0364b10 100644 Binary files a/osinaweb/customercore/migrations/__pycache__/0007_remove_ticketupdate_read_ticketupdatereadstatus.cpython-313.pyc and b/osinaweb/customercore/migrations/__pycache__/0007_remove_ticketupdate_read_ticketupdatereadstatus.cpython-313.pyc differ diff --git a/osinaweb/customercore/migrations/__pycache__/0008_rename_ticketupdatereadstatus_ticketread.cpython-313.pyc b/osinaweb/customercore/migrations/__pycache__/0008_rename_ticketupdatereadstatus_ticketread.cpython-313.pyc index 077ff284..29aaa808 100644 Binary files a/osinaweb/customercore/migrations/__pycache__/0008_rename_ticketupdatereadstatus_ticketread.cpython-313.pyc and b/osinaweb/customercore/migrations/__pycache__/0008_rename_ticketupdatereadstatus_ticketread.cpython-313.pyc differ diff --git a/osinaweb/customercore/migrations/__pycache__/0009_alter_ticketattachment_ticket.cpython-313.pyc b/osinaweb/customercore/migrations/__pycache__/0009_alter_ticketattachment_ticket.cpython-313.pyc index 0c72c3d4..111b2d8c 100644 Binary files a/osinaweb/customercore/migrations/__pycache__/0009_alter_ticketattachment_ticket.cpython-313.pyc and b/osinaweb/customercore/migrations/__pycache__/0009_alter_ticketattachment_ticket.cpython-313.pyc differ diff --git a/osinaweb/customercore/migrations/__pycache__/0010_rename_ticketreaction_ticketupdatereaction.cpython-313.pyc b/osinaweb/customercore/migrations/__pycache__/0010_rename_ticketreaction_ticketupdatereaction.cpython-313.pyc index 88cf5f86..93148e6d 100644 Binary files a/osinaweb/customercore/migrations/__pycache__/0010_rename_ticketreaction_ticketupdatereaction.cpython-313.pyc and b/osinaweb/customercore/migrations/__pycache__/0010_rename_ticketreaction_ticketupdatereaction.cpython-313.pyc differ diff --git a/osinaweb/customercore/migrations/__pycache__/0011_ticketupdatereaction_customer.cpython-313.pyc b/osinaweb/customercore/migrations/__pycache__/0011_ticketupdatereaction_customer.cpython-313.pyc index e96589af..14f9aa64 100644 Binary files a/osinaweb/customercore/migrations/__pycache__/0011_ticketupdatereaction_customer.cpython-313.pyc and b/osinaweb/customercore/migrations/__pycache__/0011_ticketupdatereaction_customer.cpython-313.pyc differ diff --git a/osinaweb/customercore/migrations/__pycache__/0012_ticket_ticket_members.cpython-313.pyc b/osinaweb/customercore/migrations/__pycache__/0012_ticket_ticket_members.cpython-313.pyc index 214d2116..b7cb67f9 100644 Binary files a/osinaweb/customercore/migrations/__pycache__/0012_ticket_ticket_members.cpython-313.pyc and b/osinaweb/customercore/migrations/__pycache__/0012_ticket_ticket_members.cpython-313.pyc differ diff --git a/osinaweb/customercore/migrations/__pycache__/0013_alter_ticket_ticket_members.cpython-313.pyc b/osinaweb/customercore/migrations/__pycache__/0013_alter_ticket_ticket_members.cpython-313.pyc index fa82a4ad..86f6b897 100644 Binary files a/osinaweb/customercore/migrations/__pycache__/0013_alter_ticket_ticket_members.cpython-313.pyc and b/osinaweb/customercore/migrations/__pycache__/0013_alter_ticket_ticket_members.cpython-313.pyc differ diff --git a/osinaweb/customercore/migrations/__pycache__/0014_remove_ticket_department_ticket_department.cpython-313.pyc b/osinaweb/customercore/migrations/__pycache__/0014_remove_ticket_department_ticket_department.cpython-313.pyc index 956edf34..dca916a2 100644 Binary files a/osinaweb/customercore/migrations/__pycache__/0014_remove_ticket_department_ticket_department.cpython-313.pyc and b/osinaweb/customercore/migrations/__pycache__/0014_remove_ticket_department_ticket_department.cpython-313.pyc differ diff --git a/osinaweb/customercore/migrations/__pycache__/0015_rename_department_ticket_departments.cpython-313.pyc b/osinaweb/customercore/migrations/__pycache__/0015_rename_department_ticket_departments.cpython-313.pyc index d7e96fe2..5d1dabaa 100644 Binary files a/osinaweb/customercore/migrations/__pycache__/0015_rename_department_ticket_departments.cpython-313.pyc and b/osinaweb/customercore/migrations/__pycache__/0015_rename_department_ticket_departments.cpython-313.pyc differ diff --git a/osinaweb/customercore/migrations/__pycache__/0016_rename_ticketstatusupdate_ticketstatus.cpython-313.pyc b/osinaweb/customercore/migrations/__pycache__/0016_rename_ticketstatusupdate_ticketstatus.cpython-313.pyc index dfcde2cd..139e1ea2 100644 Binary files a/osinaweb/customercore/migrations/__pycache__/0016_rename_ticketstatusupdate_ticketstatus.cpython-313.pyc and b/osinaweb/customercore/migrations/__pycache__/0016_rename_ticketstatusupdate_ticketstatus.cpython-313.pyc differ diff --git a/osinaweb/customercore/migrations/__pycache__/0017_tickettask.cpython-313.pyc b/osinaweb/customercore/migrations/__pycache__/0017_tickettask.cpython-313.pyc index 0f9e145b..9eca6a20 100644 Binary files a/osinaweb/customercore/migrations/__pycache__/0017_tickettask.cpython-313.pyc and b/osinaweb/customercore/migrations/__pycache__/0017_tickettask.cpython-313.pyc differ diff --git a/osinaweb/customercore/migrations/__pycache__/0018_alter_ticketattachment_file.cpython-313.pyc b/osinaweb/customercore/migrations/__pycache__/0018_alter_ticketattachment_file.cpython-313.pyc index 402929c6..9e3c06ff 100644 Binary files a/osinaweb/customercore/migrations/__pycache__/0018_alter_ticketattachment_file.cpython-313.pyc and b/osinaweb/customercore/migrations/__pycache__/0018_alter_ticketattachment_file.cpython-313.pyc differ diff --git a/osinaweb/customercore/migrations/__pycache__/0019_file.cpython-313.pyc b/osinaweb/customercore/migrations/__pycache__/0019_file.cpython-313.pyc index afae7c01..f0256c79 100644 Binary files a/osinaweb/customercore/migrations/__pycache__/0019_file.cpython-313.pyc and b/osinaweb/customercore/migrations/__pycache__/0019_file.cpython-313.pyc differ diff --git a/osinaweb/customercore/migrations/__pycache__/0020_alter_ticketattachment_file.cpython-313.pyc b/osinaweb/customercore/migrations/__pycache__/0020_alter_ticketattachment_file.cpython-313.pyc index 15c96ed3..5d59a0af 100644 Binary files a/osinaweb/customercore/migrations/__pycache__/0020_alter_ticketattachment_file.cpython-313.pyc and b/osinaweb/customercore/migrations/__pycache__/0020_alter_ticketattachment_file.cpython-313.pyc differ diff --git a/osinaweb/customercore/migrations/__pycache__/0021_file_ticket.cpython-313.pyc b/osinaweb/customercore/migrations/__pycache__/0021_file_ticket.cpython-313.pyc index 89a88383..3130e197 100644 Binary files a/osinaweb/customercore/migrations/__pycache__/0021_file_ticket.cpython-313.pyc and b/osinaweb/customercore/migrations/__pycache__/0021_file_ticket.cpython-313.pyc differ diff --git a/osinaweb/customercore/migrations/__pycache__/0022_remove_file_ticket.cpython-313.pyc b/osinaweb/customercore/migrations/__pycache__/0022_remove_file_ticket.cpython-313.pyc index 56189b73..a74dfa12 100644 Binary files a/osinaweb/customercore/migrations/__pycache__/0022_remove_file_ticket.cpython-313.pyc and b/osinaweb/customercore/migrations/__pycache__/0022_remove_file_ticket.cpython-313.pyc differ diff --git a/osinaweb/customercore/migrations/__pycache__/0023_delete_file_remove_ticketattachment_file_and_more.cpython-313.pyc b/osinaweb/customercore/migrations/__pycache__/0023_delete_file_remove_ticketattachment_file_and_more.cpython-313.pyc index a1d398ac..3f3225a3 100644 Binary files a/osinaweb/customercore/migrations/__pycache__/0023_delete_file_remove_ticketattachment_file_and_more.cpython-313.pyc and b/osinaweb/customercore/migrations/__pycache__/0023_delete_file_remove_ticketattachment_file_and_more.cpython-313.pyc differ diff --git a/osinaweb/customercore/migrations/__pycache__/0024_remove_ticketattachment_ticket_and_more.cpython-313.pyc b/osinaweb/customercore/migrations/__pycache__/0024_remove_ticketattachment_ticket_and_more.cpython-313.pyc index 3961b78a..4e12ed9c 100644 Binary files a/osinaweb/customercore/migrations/__pycache__/0024_remove_ticketattachment_ticket_and_more.cpython-313.pyc and b/osinaweb/customercore/migrations/__pycache__/0024_remove_ticketattachment_ticket_and_more.cpython-313.pyc differ diff --git a/osinaweb/customercore/migrations/__pycache__/__init__.cpython-313.pyc b/osinaweb/customercore/migrations/__pycache__/__init__.cpython-313.pyc index e0b77b5e..285758df 100644 Binary files a/osinaweb/customercore/migrations/__pycache__/__init__.cpython-313.pyc and b/osinaweb/customercore/migrations/__pycache__/__init__.cpython-313.pyc differ diff --git a/osinaweb/customercore/payment/__pycache__/urls.cpython-313.pyc b/osinaweb/customercore/payment/__pycache__/urls.cpython-313.pyc index 560b6f43..a2f191fb 100644 Binary files a/osinaweb/customercore/payment/__pycache__/urls.cpython-313.pyc and b/osinaweb/customercore/payment/__pycache__/urls.cpython-313.pyc differ diff --git a/osinaweb/customercore/payment/__pycache__/views.cpython-313.pyc b/osinaweb/customercore/payment/__pycache__/views.cpython-313.pyc index 4d24cc15..838fbe97 100644 Binary files a/osinaweb/customercore/payment/__pycache__/views.cpython-313.pyc and b/osinaweb/customercore/payment/__pycache__/views.cpython-313.pyc differ diff --git a/osinaweb/osichat/__init__.py b/osinaweb/osichat/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/osinaweb/osichat/__pycache__/__init__.cpython-310.pyc b/osinaweb/osichat/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index a907cfad..00000000 Binary files a/osinaweb/osichat/__pycache__/__init__.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/__pycache__/__init__.cpython-311.pyc b/osinaweb/osichat/__pycache__/__init__.cpython-311.pyc deleted file mode 100644 index 157a8d07..00000000 Binary files a/osinaweb/osichat/__pycache__/__init__.cpython-311.pyc and /dev/null differ diff --git a/osinaweb/osichat/__pycache__/__init__.cpython-312.pyc b/osinaweb/osichat/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 11e7539f..00000000 Binary files a/osinaweb/osichat/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/osinaweb/osichat/__pycache__/__init__.cpython-313.pyc b/osinaweb/osichat/__pycache__/__init__.cpython-313.pyc deleted file mode 100644 index 923951ec..00000000 Binary files a/osinaweb/osichat/__pycache__/__init__.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/__pycache__/admin.cpython-310.pyc b/osinaweb/osichat/__pycache__/admin.cpython-310.pyc deleted file mode 100644 index 6bd5fecb..00000000 Binary files a/osinaweb/osichat/__pycache__/admin.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/__pycache__/admin.cpython-311.pyc b/osinaweb/osichat/__pycache__/admin.cpython-311.pyc deleted file mode 100644 index 243db066..00000000 Binary files a/osinaweb/osichat/__pycache__/admin.cpython-311.pyc and /dev/null differ diff --git a/osinaweb/osichat/__pycache__/admin.cpython-312.pyc b/osinaweb/osichat/__pycache__/admin.cpython-312.pyc deleted file mode 100644 index 7f16a122..00000000 Binary files a/osinaweb/osichat/__pycache__/admin.cpython-312.pyc and /dev/null differ diff --git a/osinaweb/osichat/__pycache__/admin.cpython-313.pyc b/osinaweb/osichat/__pycache__/admin.cpython-313.pyc deleted file mode 100644 index 225f7fc3..00000000 Binary files a/osinaweb/osichat/__pycache__/admin.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/__pycache__/apps.cpython-310.pyc b/osinaweb/osichat/__pycache__/apps.cpython-310.pyc deleted file mode 100644 index dcfb36a7..00000000 Binary files a/osinaweb/osichat/__pycache__/apps.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/__pycache__/apps.cpython-311.pyc b/osinaweb/osichat/__pycache__/apps.cpython-311.pyc deleted file mode 100644 index 4085f2f2..00000000 Binary files a/osinaweb/osichat/__pycache__/apps.cpython-311.pyc and /dev/null differ diff --git a/osinaweb/osichat/__pycache__/apps.cpython-312.pyc b/osinaweb/osichat/__pycache__/apps.cpython-312.pyc deleted file mode 100644 index e6929573..00000000 Binary files a/osinaweb/osichat/__pycache__/apps.cpython-312.pyc and /dev/null differ diff --git a/osinaweb/osichat/__pycache__/apps.cpython-313.pyc b/osinaweb/osichat/__pycache__/apps.cpython-313.pyc deleted file mode 100644 index 606f7a8e..00000000 Binary files a/osinaweb/osichat/__pycache__/apps.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/__pycache__/consumers.cpython-310.pyc b/osinaweb/osichat/__pycache__/consumers.cpython-310.pyc deleted file mode 100644 index b0553d59..00000000 Binary files a/osinaweb/osichat/__pycache__/consumers.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/__pycache__/consumers.cpython-311.pyc b/osinaweb/osichat/__pycache__/consumers.cpython-311.pyc deleted file mode 100644 index 5f176222..00000000 Binary files a/osinaweb/osichat/__pycache__/consumers.cpython-311.pyc and /dev/null differ diff --git a/osinaweb/osichat/__pycache__/consumers.cpython-312.pyc b/osinaweb/osichat/__pycache__/consumers.cpython-312.pyc deleted file mode 100644 index 1512137e..00000000 Binary files a/osinaweb/osichat/__pycache__/consumers.cpython-312.pyc and /dev/null differ diff --git a/osinaweb/osichat/__pycache__/consumers.cpython-313.pyc b/osinaweb/osichat/__pycache__/consumers.cpython-313.pyc deleted file mode 100644 index 96a49d20..00000000 Binary files a/osinaweb/osichat/__pycache__/consumers.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/__pycache__/models.cpython-310.pyc b/osinaweb/osichat/__pycache__/models.cpython-310.pyc deleted file mode 100644 index d45615d9..00000000 Binary files a/osinaweb/osichat/__pycache__/models.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/__pycache__/models.cpython-311.pyc b/osinaweb/osichat/__pycache__/models.cpython-311.pyc deleted file mode 100644 index 413ad99c..00000000 Binary files a/osinaweb/osichat/__pycache__/models.cpython-311.pyc and /dev/null differ diff --git a/osinaweb/osichat/__pycache__/models.cpython-312.pyc b/osinaweb/osichat/__pycache__/models.cpython-312.pyc deleted file mode 100644 index 55f1bacb..00000000 Binary files a/osinaweb/osichat/__pycache__/models.cpython-312.pyc and /dev/null differ diff --git a/osinaweb/osichat/__pycache__/models.cpython-313.pyc b/osinaweb/osichat/__pycache__/models.cpython-313.pyc deleted file mode 100644 index 2d7ffc51..00000000 Binary files a/osinaweb/osichat/__pycache__/models.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/__pycache__/routing.cpython-310.pyc b/osinaweb/osichat/__pycache__/routing.cpython-310.pyc deleted file mode 100644 index b1481969..00000000 Binary files a/osinaweb/osichat/__pycache__/routing.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/__pycache__/routing.cpython-311.pyc b/osinaweb/osichat/__pycache__/routing.cpython-311.pyc deleted file mode 100644 index a96e880b..00000000 Binary files a/osinaweb/osichat/__pycache__/routing.cpython-311.pyc and /dev/null differ diff --git a/osinaweb/osichat/__pycache__/routing.cpython-312.pyc b/osinaweb/osichat/__pycache__/routing.cpython-312.pyc deleted file mode 100644 index df3e3675..00000000 Binary files a/osinaweb/osichat/__pycache__/routing.cpython-312.pyc and /dev/null differ diff --git a/osinaweb/osichat/__pycache__/routing.cpython-313.pyc b/osinaweb/osichat/__pycache__/routing.cpython-313.pyc deleted file mode 100644 index 67a53ab9..00000000 Binary files a/osinaweb/osichat/__pycache__/routing.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/__pycache__/urls.cpython-310.pyc b/osinaweb/osichat/__pycache__/urls.cpython-310.pyc deleted file mode 100644 index 65865720..00000000 Binary files a/osinaweb/osichat/__pycache__/urls.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/__pycache__/urls.cpython-311.pyc b/osinaweb/osichat/__pycache__/urls.cpython-311.pyc deleted file mode 100644 index 4f60986e..00000000 Binary files a/osinaweb/osichat/__pycache__/urls.cpython-311.pyc and /dev/null differ diff --git a/osinaweb/osichat/__pycache__/urls.cpython-312.pyc b/osinaweb/osichat/__pycache__/urls.cpython-312.pyc deleted file mode 100644 index 6d319097..00000000 Binary files a/osinaweb/osichat/__pycache__/urls.cpython-312.pyc and /dev/null differ diff --git a/osinaweb/osichat/__pycache__/urls.cpython-313.pyc b/osinaweb/osichat/__pycache__/urls.cpython-313.pyc deleted file mode 100644 index be75d634..00000000 Binary files a/osinaweb/osichat/__pycache__/urls.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/__pycache__/views.cpython-310.pyc b/osinaweb/osichat/__pycache__/views.cpython-310.pyc deleted file mode 100644 index e9f0676b..00000000 Binary files a/osinaweb/osichat/__pycache__/views.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/__pycache__/views.cpython-311.pyc b/osinaweb/osichat/__pycache__/views.cpython-311.pyc deleted file mode 100644 index b1fde310..00000000 Binary files a/osinaweb/osichat/__pycache__/views.cpython-311.pyc and /dev/null differ diff --git a/osinaweb/osichat/__pycache__/views.cpython-312.pyc b/osinaweb/osichat/__pycache__/views.cpython-312.pyc deleted file mode 100644 index be7ea50a..00000000 Binary files a/osinaweb/osichat/__pycache__/views.cpython-312.pyc and /dev/null differ diff --git a/osinaweb/osichat/__pycache__/views.cpython-313.pyc b/osinaweb/osichat/__pycache__/views.cpython-313.pyc deleted file mode 100644 index 5f88aa9b..00000000 Binary files a/osinaweb/osichat/__pycache__/views.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/admin.py b/osinaweb/osichat/admin.py deleted file mode 100644 index d8ffa8ea..00000000 --- a/osinaweb/osichat/admin.py +++ /dev/null @@ -1,16 +0,0 @@ -from django.contrib import admin -from .models import * -# Register your models here. -admin.site.register(Visitor) -admin.site.register(VisitorLog) -admin.site.register(ChatConnection) -admin.site.register(ChatRoom) -admin.site.register(ChatRoomGuest) -admin.site.register(ChatMember) -admin.site.register(ChatProject) -admin.site.register(ChatMessage) -admin.site.register(ChatMessageAttachment) -admin.site.register(ChatMessageReaction) -admin.site.register(ChatMessageSeen) -admin.site.register(ChatRoomReview) -admin.site.register(ChatNotification) diff --git a/osinaweb/osichat/api/__pycache__/serializers.cpython-310.pyc b/osinaweb/osichat/api/__pycache__/serializers.cpython-310.pyc deleted file mode 100644 index 958200dd..00000000 Binary files a/osinaweb/osichat/api/__pycache__/serializers.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/api/__pycache__/serializers.cpython-311.pyc b/osinaweb/osichat/api/__pycache__/serializers.cpython-311.pyc deleted file mode 100644 index 404c5f60..00000000 Binary files a/osinaweb/osichat/api/__pycache__/serializers.cpython-311.pyc and /dev/null differ diff --git a/osinaweb/osichat/api/__pycache__/serializers.cpython-312.pyc b/osinaweb/osichat/api/__pycache__/serializers.cpython-312.pyc deleted file mode 100644 index 7c65daa9..00000000 Binary files a/osinaweb/osichat/api/__pycache__/serializers.cpython-312.pyc and /dev/null differ diff --git a/osinaweb/osichat/api/__pycache__/serializers.cpython-313.pyc b/osinaweb/osichat/api/__pycache__/serializers.cpython-313.pyc deleted file mode 100644 index e8f10768..00000000 Binary files a/osinaweb/osichat/api/__pycache__/serializers.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/api/__pycache__/urls.cpython-310.pyc b/osinaweb/osichat/api/__pycache__/urls.cpython-310.pyc deleted file mode 100644 index 82a5635f..00000000 Binary files a/osinaweb/osichat/api/__pycache__/urls.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/api/__pycache__/urls.cpython-311.pyc b/osinaweb/osichat/api/__pycache__/urls.cpython-311.pyc deleted file mode 100644 index 77fed568..00000000 Binary files a/osinaweb/osichat/api/__pycache__/urls.cpython-311.pyc and /dev/null differ diff --git a/osinaweb/osichat/api/__pycache__/urls.cpython-312.pyc b/osinaweb/osichat/api/__pycache__/urls.cpython-312.pyc deleted file mode 100644 index 8efea74c..00000000 Binary files a/osinaweb/osichat/api/__pycache__/urls.cpython-312.pyc and /dev/null differ diff --git a/osinaweb/osichat/api/__pycache__/urls.cpython-313.pyc b/osinaweb/osichat/api/__pycache__/urls.cpython-313.pyc deleted file mode 100644 index 4e0bdfc4..00000000 Binary files a/osinaweb/osichat/api/__pycache__/urls.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/api/__pycache__/views.cpython-310.pyc b/osinaweb/osichat/api/__pycache__/views.cpython-310.pyc deleted file mode 100644 index 23d05d56..00000000 Binary files a/osinaweb/osichat/api/__pycache__/views.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/api/__pycache__/views.cpython-311.pyc b/osinaweb/osichat/api/__pycache__/views.cpython-311.pyc deleted file mode 100644 index fcec0d37..00000000 Binary files a/osinaweb/osichat/api/__pycache__/views.cpython-311.pyc and /dev/null differ diff --git a/osinaweb/osichat/api/__pycache__/views.cpython-312.pyc b/osinaweb/osichat/api/__pycache__/views.cpython-312.pyc deleted file mode 100644 index dc5ff19c..00000000 Binary files a/osinaweb/osichat/api/__pycache__/views.cpython-312.pyc and /dev/null differ diff --git a/osinaweb/osichat/api/__pycache__/views.cpython-313.pyc b/osinaweb/osichat/api/__pycache__/views.cpython-313.pyc deleted file mode 100644 index 1139681d..00000000 Binary files a/osinaweb/osichat/api/__pycache__/views.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/api/serializers.py b/osinaweb/osichat/api/serializers.py deleted file mode 100644 index fcc331ad..00000000 --- a/osinaweb/osichat/api/serializers.py +++ /dev/null @@ -1,37 +0,0 @@ -from osichat.models import * -from rest_framework import serializers - - -class VisitorSerializer(serializers.ModelSerializer): - class Meta: - model = Visitor - fields = '__all__' - - -class VisitorLogSerializer(serializers.ModelSerializer): - class Meta: - model = VisitorLog - fields = '__all__' - - - -class ChatRoomGuestSerializer(serializers.ModelSerializer): - visitor = VisitorSerializer() - class Meta: - model = ChatRoomGuest - fields = '__all__' - - -class ChatMessageAttachement(serializers.ModelSerializer): - class Meta: - model = ChatMessageAttachment - fields = '__all__' - - -class ChatRoomSerializer(serializers.ModelSerializer): - chatroomguest = ChatRoomGuestSerializer() - class Meta: - model = ChatRoom - fields = '__all__' - - diff --git a/osinaweb/osichat/api/urls.py b/osinaweb/osichat/api/urls.py deleted file mode 100644 index 61659995..00000000 --- a/osinaweb/osichat/api/urls.py +++ /dev/null @@ -1,10 +0,0 @@ -from django.urls import path -from . import views - - -urlpatterns = [ - path('visitors/', views.get_visitors), - path('staffs/', views.get_staffs), - path('start-conversation/', views.start_conversation), - -] \ No newline at end of file diff --git a/osinaweb/osichat/api/views.py b/osinaweb/osichat/api/views.py deleted file mode 100644 index 23fef06e..00000000 --- a/osinaweb/osichat/api/views.py +++ /dev/null @@ -1,126 +0,0 @@ -from osinacore.api.utils import * -from osichat.models import * -from rest_framework.decorators import api_view -from .serializers import * -from django.shortcuts import get_object_or_404 -from django.db.models import Q -from django.utils.dateparse import parse_date -from django.db.models import Count -from django.forms.models import model_to_dict - -@api_view(['GET']) -def get_visitors(request): - start_date = request.query_params.get("start_date") - end_date = request.query_params.get("end_date") - - if start_date: - start_date = parse_date(start_date) - if end_date: - end_date = parse_date(end_date) - - if start_date and end_date: # Range of time - visitors = Visitor.objects.filter(Q(visitorlog__visit_date__date__range=[start_date, end_date]) | Q(visitorlog__left_date__date__range=[start_date, end_date])).distinct().annotate(latest_visit=Max('visitorlog__visit_date')).order_by('-latest_visit') - - elif start_date and not end_date: # Specific date - visitors = Visitor.objects.filter(Q(visitorlog__visit_date__date=start_date) | Q(visitorlog__left_date__date=start_date)).distinct().annotate(latest_visit=Max('visitorlog__visit_date')).order_by('-latest_visit') - - else: # Active visitors - visitors = Visitor.objects.filter(visitorlog__left_date__isnull=True).distinct().annotate(latest_visit=Max('visitorlog__visit_date')).order_by('-latest_visit') - - visitors_count = visitors.count() - visitors_data = [] - for visitor in visitors: - last_log_entry = VisitorLog.objects.filter(visitor=visitor).last() - visitor_data = { - "id": visitor.id, - "ip": visitor.ip_address, - "flag": visitor.flag_image_url, - "is_online": visitor.is_online, - "duration": visitor.total_duration, - "last_log": last_log_entry.title if last_log_entry else None, - "last_log_time": last_log_entry.visit_date if last_log_entry else None, - } - visitors_data.append(visitor_data) - - response_data = { - "count": visitors_count, - "visitors": visitors_data - } - - return successRes(response_data) - - - -@api_view(['GET']) -def get_staffs(request): - staffs = StaffProfile.objects.filter(user__is_active=True).all().order_by('user__first_name') - staffs_data = [] - for staff in staffs: - staff_data = { - "id": staff.user.id, - "first_name": staff.user.first_name, - "last_name": staff.user.last_name, - "image": staff.image.url, - "last_seen": get_chat_last_seen(staff.user) - } - staffs_data.append(staff_data) - - return successRes(staffs_data) - - - - -@api_view(['POST']) -def start_conversation(request): - try: - token_data = verify(request.headers.get("Authorization")) - user_id = token_data['userid'] - user = User.objects.get(id=user_id) - - start_with_id = request.data.get('start_with') - start_with = get_object_or_404(User, id=start_with_id) - - - existing_chat_room = ( - ChatRoom.objects.annotate(member_count=Count('chatmember')) - .filter(member_count=2) - .filter(chatmember__member=user) - .filter(chatmember__member=start_with) - .distinct() - .first() - ) - if existing_chat_room: - return successRes({'room_id': existing_chat_room.id}) - - else: - chat_title = ( - f"Chat created by {user.first_name} {user.last_name} " - f"with {start_with.first_name} {start_with.last_name} " - f"on {timezone.now()}" - ) - - room = ChatRoom.objects.create( - name=chat_title, - created_by=user, - date_created=timezone.now(), - type = 'DM' - ) - - ChatMember.objects.create( - member=user, - room=room, - date_joined=timezone.now() - ) - ChatMember.objects.create( - member=start_with, - room=room, - date_joined=timezone.now() - ) - - return successRes({'room_id': room.id}) - - - except TokenError as terr: - return errorRes(msg=str(terr), status=450) - except Exception as e: - return errorRes(str(e)) diff --git a/osinaweb/osichat/apps.py b/osinaweb/osichat/apps.py deleted file mode 100644 index 20395e7e..00000000 --- a/osinaweb/osichat/apps.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.apps import AppConfig - - -class OsichatConfig(AppConfig): - default_auto_field = 'django.db.models.BigAutoField' - name = 'osichat' diff --git a/osinaweb/osichat/consumers.py b/osinaweb/osichat/consumers.py deleted file mode 100644 index 53738015..00000000 --- a/osinaweb/osichat/consumers.py +++ /dev/null @@ -1,973 +0,0 @@ -from channels.generic.websocket import WebsocketConsumer -from .models import * -import json -from django.template.loader import render_to_string -from asgiref.sync import async_to_sync -from django.shortcuts import get_object_or_404 -from django.forms.models import model_to_dict -from django.core.serializers.json import DjangoJSONEncoder -from django.db.models import Case, When, F, Max, DateTimeField -from django.db import transaction -import threading - - - -class OsitcomVisitor(WebsocketConsumer): - def connect(self): - async_to_sync(self.channel_layer.group_add)( - 'ositcom_visitors', self.channel_name - ) - self.accept() - self.visitor = None - - def disconnect(self, close_code): - if self.visitor: - self.current_log.left_date = datetime.now() - self.current_log.save() - async_to_sync(self.channel_layer.group_discard)( - 'ositcom_visitors', self.channel_name - ) - def receive(self, text_data): - text_data_json = json.loads(text_data) - event_type = text_data_json.get('event_type') - if event_type == 'visitor_ping': - session_id = text_data_json.get('session_id') - if Visitor.objects.filter(session_id=session_id).last(): - self.visitor = Visitor.objects.filter(session_id=session_id).last() - else: - self.visitor = Visitor.objects.create( - session_id = session_id, - ip_address = text_data_json.get('client_ip'), - country = text_data_json.get('client_country'), - region = text_data_json.get('client_region'), - browser_name = text_data_json.get('browser_name'), - os_name = text_data_json.get('os_name'), - ) - - self.current_log = VisitorLog.objects.create( - visitor = self.visitor, - referrer = text_data_json.get('referrer'), - title = text_data_json.get('title'), - url = text_data_json.get('url'), - visit_date = datetime.now() - ) - - - - - -class Osichat(WebsocketConsumer): - def connect(self): - self.user = self.scope["user"] - existing_connection = ChatConnection.objects.filter(user=self.user).last() - if existing_connection: - self.connection = existing_connection - self.connection.online = True - self.connection.disconnected = False - self.connection.save() - else: - self.connection = ChatConnection.objects.create(user=self.user, online=True) - async_to_sync(self.channel_layer.group_add)( - 'osichat', self.channel_name - ) - self.accept() - - def disconnect(self, close_code): - self.last_seen = datetime.now() - self.connection.disconnected = True - self.connection.save() - timer_thread = threading.Timer(3, self.check_disconnect_status) - timer_thread.start() - async_to_sync(self.channel_layer.group_discard)( - 'osichat', self.channel_name - ) - - def check_disconnect_status(self): - connection = ChatConnection.objects.filter(user=self.user).last() - if connection.disconnected: - self.connection.last_seen = self.last_seen - self.connection.online = False - self.connection.save() - - def receive(self, text_data): - data = json.loads(text_data) - event_type = data.get('event_type') - - if event_type == 'set_client_type': - self.client_type = data.get('client_type') - event = { - 'type': 'get_chats_handler', - } - if data.get('whereAmI') == 'Chats': - self.get_chats_handler(event) - else: - self.get_visitors_handler(event) - - if event_type == 'get_chats': - event = { - 'type': 'get_chats_handler', - } - self.get_chats_handler(event) - - - if event_type == 'get_dms': - event = { - 'type': 'get_dms_handler', - } - self.get_dms_handler(event) - - - if event_type == 'get_visitors': - event = { - 'type': 'get_visitors_handler', - } - self.get_visitors_handler(event) - - - def get_chats_handler(self, event): - chat_rooms = ChatRoom.objects.annotate(last_update=Max('chatmessage__date_sent'), - order_key=Case( - When(last_update__isnull=True, then=F('date_created')), - default=F('last_update'), - output_field=DateTimeField(),)).filter(chatroomguest__isnull=False).order_by('-order_key') - - for room in chat_rooms: - room.number_of_unread = room.unread_messages(self.user) - context = { - 'chat_rooms': chat_rooms, - } - - if self.client_type == 'mobile_admin': - chat_rooms_data = [] - for chat_room in chat_rooms: - last_message = ChatMessage.objects.filter(room=chat_room).last() - room_data = model_to_dict(chat_room) - room_data['number_of_unread'] = chat_room.unread_messages(self.user) - if last_message: - room_data['last_message'] = model_to_dict(last_message) - else: - room_data['last_message'] = None - if hasattr(chat_room, 'chatroomguest') and chat_room.chatroomguest.visitor: - visitor = chat_room.chatroomguest.visitor - room_data['visitor'] = { - 'id': visitor.id, - 'session_id': visitor.session_id, - 'ip': visitor.ip_address, - 'country': visitor.country, - 'region' : visitor.region, - 'country_flag': visitor.flag_image_url, - 'name': visitor.name, - 'mobile_number': visitor.mobile_number, - } - chat_rooms_data.append(room_data) - - self.send(text_data=json.dumps({ - 'event_type': 'get_chats', - 'chat_rooms_data': chat_rooms_data, - }, cls=DjangoJSONEncoder)) - else: - html = render_to_string("chat_templates/partials/rooms.html", context=context) - self.send(text_data=json.dumps({ - 'event_type': 'get_chats', - 'html': html, - })) - - - def new_chat_update_handler(self, event): - chat_room = get_object_or_404(ChatRoom, id=event['chatroom_id']) - number_of_unread = ChatMessage.objects.filter(room=chat_room).exclude(member=self.user).exclude(chatmessageseen__member=self.user).count() - last_message = ChatMessage.objects.filter(room=chat_room).last() - - context = { - 'chat_room': chat_room, - 'number_of_unread': number_of_unread - } - if self.client_type == 'mobile_admin': - chat_room_data = model_to_dict(chat_room) - if hasattr(chat_room, 'chatroomguest') and chat_room.chatroomguest.visitor: - chat_room_data['visitor'] = model_to_dict(chat_room.chatroomguest.visitor) - if chat_room.chatmember_set.all(): - members = chat_room - member_data = [] - for member in members: - member_data.append({ - 'id': member.member.id, - 'first_name': member.member.first_name, - 'last_name': member.member.last_name, - 'online': get_chat_last_seen(member.member), - 'image': member.member.staffprofile.image.url if member.member.staffprofile and member.member.staffprofile.image else None - - }) - chat_room_data['members'] = member_data - if last_message: - chat_room_data['last_message'] = model_to_dict(last_message) - else: - chat_room_data['last_message'] = None - self.send(text_data=json.dumps({ - 'event_type': 'new_chat_update', - 'chat_room_data': chat_room_data, - }, cls=DjangoJSONEncoder)) - else: - html = render_to_string("chat_templates/partials/new-chat-room.html", context=context) - self.send(text_data=json.dumps({ - 'event_type': 'new_chat_update', - 'chatroom_id': chat_room.id, - 'user': last_message.member.id if last_message and last_message.member else None, - 'html': html, - })) - - - def get_dms_handler(self, event): - chat_rooms = ChatRoom.objects.annotate(last_update=Max('chatmessage__date_sent'),order_key=Case( - When(last_update__isnull=True, then=F('date_created')), - default=F('last_update'), - output_field=DateTimeField(),)).filter(chatroomguest__isnull=True, chatmember__member=self.user).order_by('-order_key') - context = { - 'chat_rooms': chat_rooms, - } - if self.client_type == 'mobile_admin': - chat_rooms_data = [] - if chat_rooms: - for chat_room in chat_rooms: - last_message = ChatMessage.objects.filter(room=chat_room).last() - chat_room_data = { - 'id': chat_room.id, - 'name': chat_room.name, - 'last_update': chat_room.last_updated, - 'date_created': chat_room.date_created, - 'unread_messages': chat_room.unread_messages(self.user), - 'last_message': model_to_dict(last_message) if last_message else None - } - members = chat_room.chatmember_set.all() - member_data = [] - for member in members: - member_data.append({ - 'id': member.member.id, - 'first_name': member.member.first_name, - 'last_name': member.member.last_name, - 'online': get_chat_last_seen(member.member), - 'image': member.member.staffprofile.image.url if member.member.staffprofile and member.member.staffprofile.image else None - }) - - chat_room_data['members'] = member_data - chat_rooms_data.append(chat_room_data) - - self.send(text_data=json.dumps({ - 'event_type': 'get_dms', - 'chat_rooms_data': chat_rooms_data, - }, cls=DjangoJSONEncoder)) - - - def new_online_activity_handler(self, event): - connection = get_object_or_404(ChatConnection, id=event['connection_id']) - context = { - 'connection': connection, - } - if self.client_type == 'mobile_admin': - connection_data =[] - connection_data.append({ - 'user_id': connection.user.id, - 'online': connection.online, - 'last_seen': connection.last_seen - }) - self.send(text_data=json.dumps({ - 'event_type': 'new_online_activity', - 'connection_data': connection_data, - }, cls=DjangoJSONEncoder)) - - - def get_visitors_handler(self, event): - today = timezone.now().date() - visitors = Visitor.objects.filter(visitorlog__visit_date__date=today).annotate(latest_visit=Max('visitorlog__visit_date')).order_by('-latest_visit') - context = { - 'visitors': visitors, - } - if self.client_type == 'mobile_admin': - visitors_data = [] - for visitor in visitors: - visitor_data = model_to_dict(visitor) - visitor_data['is_online'] = visitor.is_online - visitor_data['duration'] = visitor.total_duration - visitor_data['flag'] = visitor.flag_image_url - - - visitor_logs = VisitorLog.objects.filter(visitor=visitor) - visitor_logs_data = [] - for log in visitor_logs: - log_data = model_to_dict(log) - log_data['log_duration'] = log.log_duration - visitor_logs_data.append(log_data) - - visitor_data['visitor_logs'] = visitor_logs_data - visitors_data.append(visitor_data) - - self.send(text_data=json.dumps({ - 'event_type': 'get_visitors', - 'visitors_data': visitors_data, - }, cls=DjangoJSONEncoder)) - - else: - html = render_to_string("chat_templates/partials/visitors.html", context=context) - self.send(text_data=json.dumps({ - 'event_type': 'get_visitors', - 'html': html, - })) - - - def new_visitor_update_handler(self, event): - visitor = get_object_or_404(Visitor, id=event['visitor_id']) - latest_log = VisitorLog.objects.filter(visitor=visitor).last() - context = { - 'visitor': visitor, - } - if self.client_type == 'mobile_admin': - visitor_data = model_to_dict(visitor) - visitor_data['is_online'] = visitor.is_online - visitor_data['duration'] = visitor.total_duration - visitor_data['flag'] = visitor.flag_image_url - if latest_log: - latest_log_data = model_to_dict(latest_log) - latest_log_data['log_duration'] = latest_log.log_duration - visitor_data['latest_log'] = latest_log_data - - - - self.send(text_data=json.dumps({ - 'event_type': 'new_visitor_update', - 'visitor_data': visitor_data, - 'action': event['action'], - }, cls=DjangoJSONEncoder)) - else: - html = render_to_string("chat_templates/partials/new-visitor.html", context=context) - self.send(text_data=json.dumps({ - 'event_type': 'new_visitor_update', - 'visitor_id': visitor.id, - 'action': event['action'], - 'html': html, - })) - - - - - -class OsichatVisitor(WebsocketConsumer): - def connect(self): - self.visitor_id = self.scope['url_route']['kwargs']['visitor_id'] - self.group_name = 'V' + str(self.visitor_id) - self.visitor = get_object_or_404(Visitor, id=self.visitor_id) - async_to_sync(self.channel_layer.group_add)( - self.group_name, self.channel_name - ) - self.accept() - - def disconnect(self, close_code): - async_to_sync(self.channel_layer.group_discard)( - self.group_name, self.channel_name - ) - - def receive(self, text_data): - data = json.loads(text_data) - event_type = data.get('event_type') - - if event_type == 'set_client_type': - self.client_type = data.get('client_type') - event = { - 'type': 'get_visitor_handler', - } - - async_to_sync(self.channel_layer.group_send)( - self.group_name, event - ) - - def get_visitor_handler(self, event): - if self.client_type == 'mobile_admin': - visitor_data = model_to_dict(self.visitor) - visitor_data['online'] = self.visitor.is_online - visitor_data['flag'] = self.visitor.flag_image_url - visitor_logs = VisitorLog.objects.filter(visitor=self.visitor) - visitor_logs_data = [] - for log in visitor_logs: - log_data = model_to_dict(log) - log_data['log_duration'] = log.log_duration - visitor_logs_data.append(log_data) - visitor_data['visitor_logs'] = visitor_logs_data - - self.send(text_data=json.dumps({ - 'event_type': 'get_visitor', - 'visitor_data': visitor_data, - }, cls=DjangoJSONEncoder)) - - def new_visitor_update_handler(self, event): - visitor = self.visitor - latest_log = VisitorLog.objects.filter(visitor=self.visitor).last() - if self.client_type == 'mobile_admin': - visitor_data = model_to_dict(visitor) - visitor_data['is_online'] = visitor.is_online - visitor_data['duration'] = visitor.total_duration - visitor_data['flag'] = visitor.flag_image_url - if latest_log: - latest_log_data = model_to_dict(latest_log) - latest_log_data['log_duration'] = latest_log.log_duration - visitor_data['latest_log'] = latest_log_data - self.send(text_data=json.dumps({ - 'event_type': 'new_visitor_update', - 'visitor_data': visitor_data, - 'action': event['action'], - }, cls=DjangoJSONEncoder)) - - - - - - -class OsitcomChatRoom(WebsocketConsumer): - def connect(self): - self.domain = 'https://osina.ositcom.com' - self.session_id = self.scope['url_route']['kwargs'].get('session_id') - if self.session_id: - self.visitor = Visitor.objects.filter(session_id=self.session_id).last() - if self.session_id and not self.visitor: - self.close() - - if self.scope['url_route']['kwargs'].get('chat_id'): #Case where admin is accessing a specific conversation between the conversations of this visitor - self.chat_room = get_object_or_404(ChatRoom, id=self.scope['url_route']['kwargs'].get('chat_id')) - else: - chat_room_guest = ChatRoomGuest.objects.filter(visitor=self.visitor).last() #Case where the visitor will always acesss his last conversation - if chat_room_guest: - self.chat_room = chat_room_guest.room - else: - self.chat_room = None - - if self.scope["user"].is_authenticated and self.chat_room: #If a user add him as a chat_member - self.chat_member = ChatMember.objects.filter(member=self.scope["user"]).last() - if not self.chat_member: - self.chat_member = ChatMember.objects.create( - room=self.chat_room, - member=self.scope["user"], - date_joined = datetime.now() - ) - - if self.chat_room: - self.group = f"chat_{self.chat_room.id}" - else: - self.group = self.session_id #Visitor hasn't started a chat yet, when he will we will remove him from this group and add it to the chat group - - async_to_sync(self.channel_layer.group_add)( - self.group, self.channel_name - ) - self.accept() - - - def disconnect(self, close_code): - async_to_sync(self.channel_layer.group_discard)( - self.group, self.channel_name - ) - - - - def receive(self, text_data): - text_data_json = json.loads(text_data) - event_type = text_data_json.get('event_type') - - if event_type == 'load_chat': - self.client_type = text_data_json.get('client_type') - event = { - 'reconnecting' : text_data_json.get('reconnecting') - } - self.load_chat_handler(event) - - if event_type == 'start_conversation': - try: - with transaction.atomic(): - chat_room = ChatRoom.objects.create( - name=f"Support: {self.session_id}", - date_created = datetime.now(), - type = 'Visitor Room' - ) - if text_data_json.get('guest_name'): - self.visitor.name = text_data_json.get('guest_name') - self.visitor.save() - if text_data_json.get('guest_mobile_number'): - self.visitor.mobile_number = text_data_json.get('guest_mobile_number') - self.visitor.save() - chat_room_guest = ChatRoomGuest.objects.create( - room=chat_room, - visitor=self.visitor - ) - self.chat_room = chat_room - async_to_sync(self.channel_layer.group_discard)( - self.group, self.channel_name - ) - self.group = f"chat_{self.chat_room.id}" - async_to_sync(self.channel_layer.group_add)( - self.group, self.channel_name - ) - event = { - 'type': 'start_conversation_handler', - 'chat_room_id': chat_room.id - } - async_to_sync(self.channel_layer.group_send)( - self.group, event - ) - except Exception as e: - print('Error starting conversation') - - - if event_type == 'typing': - event = { - 'type': 'typing_handler', - 'user_id': text_data_json.get('user_id'), - 'typing_status': text_data_json.get('typing_status') - } - async_to_sync(self.channel_layer.group_send)( - self.group, event - ) - - if event_type == 'recording': - event = { - 'type': 'recording_handler', - 'user_id': text_data_json.get('user_id'), - 'recording_status': text_data_json.get('recording_status') - } - async_to_sync(self.channel_layer.group_send)( - self.group, event - ) - - if event_type == 'send_message': - if text_data_json.get('user_id'): - member = get_object_or_404(User, id=text_data_json.get('user_id')) - else: - member = None - chat_message = ChatMessage.objects.create( - member = member, - room = self.chat_room, - content= text_data_json.get('message'), - date_sent = datetime.now() - ) - event = { - 'type': 'send_message_handler', - 'chat_message_id': chat_message.id - } - async_to_sync(self.channel_layer.group_send)( - self.group, event - ) - - if event_type == 'uploaded_file': - if text_data_json.get('user_id'): - member = get_object_or_404(User, id=text_data_json.get('user_id')) - else: - member = None - message = ChatMessage.objects.create( - member = member, - room = self.chat_room, - date_sent = datetime.now() - ) - message_attachment = ChatMessageAttachment.objects.create( - message = message, - attachment = text_data_json.get('path'), - ) - event = { - 'type': 'uploaded_file_handler', - 'message_attachment_id': message_attachment.id, - 'file_type': text_data_json.get('file_type'), - 'file_name': text_data_json.get('file_name'), - } - async_to_sync(self.channel_layer.group_send)( - self.group, event - ) - - if event_type == 'update_read_messages' and self.chat_room: - latest_unread_message = None - number_of_unread = 0 - if text_data_json.get('user_id'): - member = get_object_or_404(User, id=text_data_json.get('user_id')) - guest = None - if text_data_json.get('chat_state') == 'open': - messages = ChatMessage.objects.filter(room=self.chat_room).exclude(member=member) - for message in messages: - seen_message = ChatMessageSeen.objects.filter( - message=message, - member=member - ).exists() - - if not seen_message: - ChatMessageSeen.objects.create( - message=message, - member=member, - seen_date = datetime.now() - ) - number_of_unread = 0 - else: - number_of_unread = ChatMessage.objects.filter(room=self.chat_room).exclude(member = member).exclude(hatmessageseen__member=member).count() - latest_unread_message = ChatMessage.objects.filter(room=self.chat_room).exclude(chatmessageseen__member=member).last() - else: - member = None - guest = self.chat_room.chatroomguest - if text_data_json.get('chat_state') == 'open': - messages = ChatMessage.objects.filter(room=self.chat_room).exclude(member=None) - for message in messages: - seen_message = ChatMessageSeen.objects.filter( - message=message, - guest=guest - ).exists() - - if not seen_message: - ChatMessageSeen.objects.create( - message=message, - guest=guest, - seen_date = datetime.now() - ) - - number_of_unread = 0 - - else: - number_of_unread = ChatMessage.objects.filter(room=self.chat_room, member__isnull=False).exclude(chatmessageseen__guest=guest).count() - latest_unread_message = ChatMessage.objects.filter(room=self.chat_room, member__isnull=False).exclude(chatmessageseen__guest=guest).last() - - event = { - 'type': 'update_read_messages_handler', - 'number_of_unread': number_of_unread, - 'latest_unread_message_id': latest_unread_message.id if latest_unread_message else None - } - self.update_read_messages_handler(event) - - if event_type == 'end_chat': - event = { - 'type': 'end_chat_handler', - 'user_id': text_data_json.get('user_id') - } - async_to_sync(self.channel_layer.group_send)( - self.group, event - ) - - if event_type == 'submit_review': - if ChatRoomReview.objects.filter(room=self.chat_room).last(): - review = ChatRoomReview.objects.filter(room=self.chat_room).last() - if text_data_json.get('reaction'): - review.reaction = text_data_json.get('reaction') - if text_data_json.get('details'): - review.details = text_data_json.get('details') - review.save() - else: - review = ChatRoomReview.objects.create( - room = self.chat_room, - reaction = text_data_json.get('reaction'), - details = text_data_json.get('details'), - ) - event = { - 'type': 'submit_review_handler', - 'review_id': review.id - } - async_to_sync(self.channel_layer.group_send)( - self.group, event - ) - - - - - - - def load_chat_handler(self, event): - if self.chat_room: - chat_room = self.chat_room - chat_room_messages = ChatMessage.objects.filter(room=chat_room).order_by('date_sent') - review = ChatRoomReview.objects.filter(room=chat_room).last() - - else: - chat_room = None - chat_room_messages = None - review = None - - context = { - 'chat_room': chat_room, - 'chat_room_messages': chat_room_messages, - 'review': review, - 'domain': self.domain - } - - if self.client_type == 'mobile_admin': - chat_room_data = model_to_dict(chat_room) - if hasattr(chat_room, 'chatroomguest') and chat_room.chatroomguest.visitor: - chat_room_data['visitor'] = { - 'id': chat_room.chatroomguest.visitor.id, - 'country_flag': chat_room.chatroomguest.visitor.flag_image_url, - 'is_online': chat_room.chatroomguest.visitor.is_online, - 'ip': chat_room.chatroomguest.visitor.ip_address, - 'name': chat_room.chatroomguest.visitor.name, - 'mobile_number': chat_room.chatroomguest.visitor.mobile_number, - } - - chat_members = ChatMember.objects.filter(room=chat_room) - if chat_members.exists(): - chat_room_data['members'] = [ - { - 'id': member.member.id, - 'first_name': member.member.first_name, - 'last_name': member.member.last_name, - 'online': get_chat_last_seen(member.member), - 'image': member.member.staffprofile.image.url if member.member.staffprofile and member.member.staffprofile.image else None - - } - for member in chat_members - ] - else: - chat_room_data['members'] = [] - - - - chat_room_messages_data = [] - for message in chat_room_messages: - message_data = model_to_dict(message) - attachment = getattr(message, 'chatmessageattachment', None) - member = message.member - if member: - message_data['member'] = { - 'id': member.id, - 'first_name': member.first_name, - 'last_name': member.last_name, - 'image': member.staffprofile.image.url if member.staffprofile and member.staffprofile.image else None - } - if attachment: - message_data['attachment'] = { - 'attachment': attachment.attachment, - 'is_image': attachment.is_image(), - 'file_name': attachment.file_name, - } - else: - message_data['attachment'] = None - - chat_room_messages_data.append(message_data) - - self.send(text_data=json.dumps({ - 'event_type': 'load_chat', - 'chat_room_data': chat_room_data, - 'chat_room_messages_data': chat_room_messages_data, - }, cls=DjangoJSONEncoder)) - - elif self.client_type == 'website_admin': - html = render_to_string("chat_templates/chat-room.html", context=context) - self.send(text_data=json.dumps({ - 'event_type': 'load_chat', - 'html': html, - })) - else: - if event.get('reconnecting') == 'False': #Connecting for the first time - html = render_to_string("chat-widget.html", context=context) - else: - if chat_room: - if chat_room.date_terminated: - html = render_to_string("ended-chat.html", context=context) - else: - html = render_to_string("chat-room.html", context=context) - else: - html = render_to_string("start-chat.html", context=context) - self.send(text_data=json.dumps({ - 'event_type': 'load_chat', - 'html': html, - })) - - - def start_conversation_handler(self, event): - chat_room = get_object_or_404(ChatRoom, id=event['chat_room_id']) - context = { - 'chat_room': chat_room, - 'session_id':self.session_id, - 'domain': self.domain - } - if self.client_type == 'mobile_admin': - self.send(text_data=json.dumps({ - 'event_type': 'start_conversation', - 'context': context, - })) - else: - html = render_to_string("chat-room.html", context=context) - self.send(text_data=json.dumps({ - 'event_type': 'start_conversation', - 'html': html, - })) - - - def typing_handler(self, event): - if event.get('typing_status') == 'typing': - if event.get('user_id'): - member = get_object_or_404(User, id=event.get('user_id')) - else: - member = None - - context = { - 'member': member, - 'chat_room': self.chat_room, - 'domain': self.domain - } - if self.client_type == 'mobile_admin': - member_data = None - if member: - member_data = model_to_dict(member) - member_data['image'] = member.staffprofile.image.url if member.staffprofile and member.staffprofile.image else None - self.send(text_data=json.dumps({ - 'event_type': 'typing', - 'member_data': member_data, - }, cls=DjangoJSONEncoder)) - elif self.client_type == 'website_admin': - html = render_to_string("chat_templates/partials/typing.html", context=context) - self.send(text_data=json.dumps({ - 'event_type': 'typing', - 'user': member.id if member else None, - 'html': html, - })) - else: - html = render_to_string("partials/typing.html", context=context) - self.send(text_data=json.dumps({ - 'event_type': 'typing', - 'user': member.id if member else None, - 'html': html, - })) - else: - self.send(text_data=json.dumps({ - 'event_type': 'stopped_typing', - })) - - - def recording_handler(self, event): - if event.get('recording_status') == 'recording': - if event.get('user_id'): - member = get_object_or_404(User, id=event.get('user_id')) - else: - member = None - - context = { - 'member': member, - 'chat_room': self.chat_room, - 'domain': self.domain - } - if self.client_type == 'mobile_admin': - member_data = None - if member: - member_data = model_to_dict(member) - member_data['image'] = member.staffprofile.image.url if member.staffprofile and member.staffprofile.image else None - self.send(text_data=json.dumps({ - 'event_type': 'recording', - 'member_data': member_data, - }, cls=DjangoJSONEncoder)) - - else: - self.send(text_data=json.dumps({ - 'event_type': 'stopped_recording', - })) - - - def send_message_handler(self, event): - chat_message = get_object_or_404(ChatMessage, id=event['chat_message_id']) - context = { - 'chat_message': chat_message, - 'domain': self.domain - } - if self.client_type == 'mobile_admin': - chat_message_data = model_to_dict(chat_message) - member = chat_message.member - if member: - chat_message_data['member'] = { - 'id': member.id, - 'first_name': member.first_name, - 'last_name': member.last_name, - 'image': member.staffprofile.image.url if member.staffprofile and member.staffprofile.image else None - } - self.send(text_data=json.dumps({ - 'event_type': 'send_message', - 'chat_message_data': chat_message_data, - },cls=DjangoJSONEncoder)) - elif self.client_type == 'website_admin': - html = render_to_string("chat_templates/partials/message.html", context=context) - self.send(text_data=json.dumps({ - 'event_type': 'send_message', - 'user': chat_message.member.id if chat_message.member else None, - 'html': html, - })) - else: - html = render_to_string("partials/message.html", context=context) - self.send(text_data=json.dumps({ - 'event_type': 'send_message', - 'user': chat_message.member.id if chat_message.member else None, - 'html': html, - })) - - - def uploaded_file_handler(self, event): - message_attachment = get_object_or_404(ChatMessageAttachment, id=event['message_attachment_id']) - context = { - 'message_attachment': message_attachment, - 'file_type': event['file_type'], - 'domain': self.domain - } - if self.client_type == 'mobile_admin': - message_attachment_data = model_to_dict(message_attachment) - self.send(text_data=json.dumps({ - 'event_type': 'uploaded_file', - 'message_attachment_data': message_attachment_data, - 'user': message_attachment.message.member.id if message_attachment.message.member else None, - 'file_type': event['file_type'] - },cls=DjangoJSONEncoder)) - else: - html = render_to_string("partials/message-attachment.html", context=context) - self.send(text_data=json.dumps({ - 'event_type': 'uploaded_file', - 'file_name': event['file_name'], - 'user': message_attachment.message.member.id if message_attachment.message.member else None, - 'html': html, - })) - - - def update_read_messages_handler(self, event): - latest_unread_message_id = event.get('latest_unread_message_id') - if latest_unread_message_id: - latest_unread_message = get_object_or_404(ChatMessage, id=latest_unread_message_id) - context = { - 'number_of_unread' : event['number_of_unread'], - 'latest_unread_message': latest_unread_message, - 'domain': self.domain - } - if self.client_type == 'mobile_admin': - self.send(text_data=json.dumps({ - 'event_type': 'update_read_messages', - 'number_of_unread': event['number_of_unread'], - },cls=DjangoJSONEncoder)) - else: - html = render_to_string("partials/unread-messages.html", context=context) - self.send(text_data=json.dumps({ - 'event_type': 'update_read_messages', - 'html': html, - })) - else: - latest_unread_message = None - - - def end_chat_handler(self, event): - if event['user_id']: - member = get_object_or_404(User, id=event['user_id']) - else: - member = None - self.chat_room.date_terminated = datetime.now() - self.chat_room.terminated_by = member - self.chat_room.save() - context = { - 'chat_room': self.chat_room, - 'chat_room_messages': ChatMessage.objects.filter(room=self.chat_room).order_by('date_sent'), - 'domain': self.domain - } - html = render_to_string("ended-chat.html", context=context) - self.send(text_data=json.dumps({ - 'event_type': 'ended_chat', - 'html': html, - })) - - def submit_review_handler(self, event): - review = get_object_or_404(ChatRoomReview, id=event['review_id']) - context = { - 'review': review, - 'chat_room': self.chat_room, - } - html = render_to_string("partials/submitted-review.html", context=context) - self.send(text_data=json.dumps({ - 'event_type': 'submit_review', - 'html': html, - })) \ No newline at end of file diff --git a/osinaweb/osichat/migrations/0001_initial.py b/osinaweb/osichat/migrations/0001_initial.py deleted file mode 100644 index c7ba5ad5..00000000 --- a/osinaweb/osichat/migrations/0001_initial.py +++ /dev/null @@ -1,79 +0,0 @@ -# Generated by Django 4.2.5 on 2024-07-16 10:34 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('osinacore', '0097_remove_status_date_remove_status_time'), - ] - - operations = [ - migrations.CreateModel( - name='ChatMessage', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('content', models.TimeField(blank=True, null=True)), - ('date_sent', models.DateTimeField()), - ('member', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)), - ], - ), - migrations.CreateModel( - name='ChatRoom', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=50)), - ('date_created', models.DateTimeField()), - ('created_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)), - ], - ), - migrations.CreateModel( - name='ChatProject', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('public', models.BooleanField()), - ('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='osinacore.project')), - ('room', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='osichat.chatroom')), - ], - ), - migrations.CreateModel( - name='ChatMessageSeen', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('member', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), - ('message', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='osichat.chatmessage')), - ], - ), - migrations.CreateModel( - name='ChatMessageReaction', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('reaction', models.CharField(max_length=200)), - ('member', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), - ('message', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='osichat.chatmessage')), - ], - ), - migrations.CreateModel( - name='ChatMessageAttachment', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('attachment', models.TextField()), - ('message', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='osichat.chatmessage')), - ], - ), - migrations.CreateModel( - name='ChatMember', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('date_joined', models.DateTimeField()), - ('member', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), - ('room', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='osichat.chatroom')), - ], - ), - ] diff --git a/osinaweb/osichat/migrations/0002_chatroom_guest_session_alter_chatroom_created_by_and_more.py b/osinaweb/osichat/migrations/0002_chatroom_guest_session_alter_chatroom_created_by_and_more.py deleted file mode 100644 index 8151bdcb..00000000 --- a/osinaweb/osichat/migrations/0002_chatroom_guest_session_alter_chatroom_created_by_and_more.py +++ /dev/null @@ -1,31 +0,0 @@ -# Generated by Django 4.2.5 on 2024-07-20 08:19 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('osichat', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='chatroom', - name='guest_session', - field=models.CharField(blank=True, max_length=300, null=True), - ), - migrations.AlterField( - model_name='chatroom', - name='created_by', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL), - ), - migrations.AlterField( - model_name='chatroom', - name='name', - field=models.CharField(max_length=300), - ), - ] diff --git a/osinaweb/osichat/migrations/0003_chatroomguest_remove_chatroom_guest_session.py b/osinaweb/osichat/migrations/0003_chatroomguest_remove_chatroom_guest_session.py deleted file mode 100644 index 6c011c6f..00000000 --- a/osinaweb/osichat/migrations/0003_chatroomguest_remove_chatroom_guest_session.py +++ /dev/null @@ -1,26 +0,0 @@ -# Generated by Django 4.2.5 on 2024-07-20 08:28 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('osichat', '0002_chatroom_guest_session_alter_chatroom_created_by_and_more'), - ] - - operations = [ - migrations.CreateModel( - name='ChatRoomGuest', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=300)), - ('mobile_number', models.CharField(max_length=100)), - ('session_id', models.CharField(max_length=300)), - ], - ), - migrations.RemoveField( - model_name='chatroom', - name='guest_session', - ), - ] diff --git a/osinaweb/osichat/migrations/0004_chatroomguest_room.py b/osinaweb/osichat/migrations/0004_chatroomguest_room.py deleted file mode 100644 index c8401fcf..00000000 --- a/osinaweb/osichat/migrations/0004_chatroomguest_room.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 4.2.5 on 2024-07-20 08:29 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('osichat', '0003_chatroomguest_remove_chatroom_guest_session'), - ] - - operations = [ - migrations.AddField( - model_name='chatroomguest', - name='room', - field=models.OneToOneField(null=True, on_delete=django.db.models.deletion.CASCADE, to='osichat.chatroom'), - ), - ] diff --git a/osinaweb/osichat/migrations/0005_alter_chatmessage_member.py b/osinaweb/osichat/migrations/0005_alter_chatmessage_member.py deleted file mode 100644 index 2b06a3a8..00000000 --- a/osinaweb/osichat/migrations/0005_alter_chatmessage_member.py +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Django 4.2.5 on 2024-07-20 12:36 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('osichat', '0004_chatroomguest_room'), - ] - - operations = [ - migrations.AlterField( - model_name='chatmessage', - name='member', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL), - ), - ] diff --git a/osinaweb/osichat/migrations/0006_alter_chatmessage_content.py b/osinaweb/osichat/migrations/0006_alter_chatmessage_content.py deleted file mode 100644 index bb152113..00000000 --- a/osinaweb/osichat/migrations/0006_alter_chatmessage_content.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.2.5 on 2024-07-20 12:45 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('osichat', '0005_alter_chatmessage_member'), - ] - - operations = [ - migrations.AlterField( - model_name='chatmessage', - name='content', - field=models.TextField(blank=True, null=True), - ), - ] diff --git a/osinaweb/osichat/migrations/0007_chatmessage_room.py b/osinaweb/osichat/migrations/0007_chatmessage_room.py deleted file mode 100644 index 0b87e7cc..00000000 --- a/osinaweb/osichat/migrations/0007_chatmessage_room.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 4.2.5 on 2024-07-20 13:04 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('osichat', '0006_alter_chatmessage_content'), - ] - - operations = [ - migrations.AddField( - model_name='chatmessage', - name='room', - field=models.OneToOneField(null=True, on_delete=django.db.models.deletion.CASCADE, to='osichat.chatroom'), - ), - ] diff --git a/osinaweb/osichat/migrations/0008_alter_chatmessage_room.py b/osinaweb/osichat/migrations/0008_alter_chatmessage_room.py deleted file mode 100644 index bdf29a24..00000000 --- a/osinaweb/osichat/migrations/0008_alter_chatmessage_room.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 4.2.5 on 2024-07-20 13:44 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('osichat', '0007_chatmessage_room'), - ] - - operations = [ - migrations.AlterField( - model_name='chatmessage', - name='room', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='osichat.chatroom'), - ), - ] diff --git a/osinaweb/osichat/migrations/0009_visitor.py b/osinaweb/osichat/migrations/0009_visitor.py deleted file mode 100644 index 3d3703b5..00000000 --- a/osinaweb/osichat/migrations/0009_visitor.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 4.2.5 on 2024-07-21 16:48 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('osichat', '0008_alter_chatmessage_room'), - ] - - operations = [ - migrations.CreateModel( - name='Visitor', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('session_id', models.CharField(max_length=300)), - ('ip_address', models.CharField(max_length=300)), - ('url', models.URLField()), - ('reference', models.URLField()), - ], - ), - ] diff --git a/osinaweb/osichat/migrations/0010_visitor_left_date_visitor_visit_date.py b/osinaweb/osichat/migrations/0010_visitor_left_date_visitor_visit_date.py deleted file mode 100644 index 7bfd2f64..00000000 --- a/osinaweb/osichat/migrations/0010_visitor_left_date_visitor_visit_date.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 4.2.5 on 2024-07-21 16:49 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('osichat', '0009_visitor'), - ] - - operations = [ - migrations.AddField( - model_name='visitor', - name='left_date', - field=models.DateTimeField(null=True), - ), - migrations.AddField( - model_name='visitor', - name='visit_date', - field=models.DateTimeField(null=True), - ), - ] diff --git a/osinaweb/osichat/migrations/0011_visitor_country.py b/osinaweb/osichat/migrations/0011_visitor_country.py deleted file mode 100644 index 6fde18b2..00000000 --- a/osinaweb/osichat/migrations/0011_visitor_country.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.2.5 on 2024-07-21 17:09 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('osichat', '0010_visitor_left_date_visitor_visit_date'), - ] - - operations = [ - migrations.AddField( - model_name='visitor', - name='country', - field=models.CharField(max_length=15, null=True), - ), - ] diff --git a/osinaweb/osichat/migrations/0012_alter_visitor_reference.py b/osinaweb/osichat/migrations/0012_alter_visitor_reference.py deleted file mode 100644 index 1935ef65..00000000 --- a/osinaweb/osichat/migrations/0012_alter_visitor_reference.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.2.5 on 2024-07-21 17:25 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('osichat', '0011_visitor_country'), - ] - - operations = [ - migrations.AlterField( - model_name='visitor', - name='reference', - field=models.URLField(blank=True, null=True), - ), - ] diff --git a/osinaweb/osichat/migrations/0013_rename_reference_visitor_referrer.py b/osinaweb/osichat/migrations/0013_rename_reference_visitor_referrer.py deleted file mode 100644 index e2e6ae48..00000000 --- a/osinaweb/osichat/migrations/0013_rename_reference_visitor_referrer.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.2.5 on 2024-07-21 19:58 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('osichat', '0012_alter_visitor_reference'), - ] - - operations = [ - migrations.RenameField( - model_name='visitor', - old_name='reference', - new_name='referrer', - ), - ] diff --git a/osinaweb/osichat/migrations/0014_alter_chatmessageattachment_message.py b/osinaweb/osichat/migrations/0014_alter_chatmessageattachment_message.py deleted file mode 100644 index e8806e07..00000000 --- a/osinaweb/osichat/migrations/0014_alter_chatmessageattachment_message.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 4.2.5 on 2024-07-29 18:19 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('osichat', '0013_rename_reference_visitor_referrer'), - ] - - operations = [ - migrations.AlterField( - model_name='chatmessageattachment', - name='message', - field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='osichat.chatmessage'), - ), - ] diff --git a/osinaweb/osichat/migrations/0015_chatmessageseen_guest_alter_chatmessageseen_member.py b/osinaweb/osichat/migrations/0015_chatmessageseen_guest_alter_chatmessageseen_member.py deleted file mode 100644 index 4cdd9f56..00000000 --- a/osinaweb/osichat/migrations/0015_chatmessageseen_guest_alter_chatmessageseen_member.py +++ /dev/null @@ -1,26 +0,0 @@ -# Generated by Django 4.2.5 on 2024-07-31 06:57 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('osichat', '0014_alter_chatmessageattachment_message'), - ] - - operations = [ - migrations.AddField( - model_name='chatmessageseen', - name='guest', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='osichat.chatroomguest'), - ), - migrations.AlterField( - model_name='chatmessageseen', - name='member', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), - ), - ] diff --git a/osinaweb/osichat/migrations/0016_chatmessageseen_seen_date.py b/osinaweb/osichat/migrations/0016_chatmessageseen_seen_date.py deleted file mode 100644 index f355b5d2..00000000 --- a/osinaweb/osichat/migrations/0016_chatmessageseen_seen_date.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.2.5 on 2024-07-31 07:32 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('osichat', '0015_chatmessageseen_guest_alter_chatmessageseen_member'), - ] - - operations = [ - migrations.AddField( - model_name='chatmessageseen', - name='seen_date', - field=models.DateTimeField(null=True), - ), - ] diff --git a/osinaweb/osichat/migrations/0017_chatroom_date_terminated_chatroom_terminated_by.py b/osinaweb/osichat/migrations/0017_chatroom_date_terminated_chatroom_terminated_by.py deleted file mode 100644 index 58229955..00000000 --- a/osinaweb/osichat/migrations/0017_chatroom_date_terminated_chatroom_terminated_by.py +++ /dev/null @@ -1,26 +0,0 @@ -# Generated by Django 4.2.5 on 2024-08-01 16:49 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('osichat', '0016_chatmessageseen_seen_date'), - ] - - operations = [ - migrations.AddField( - model_name='chatroom', - name='date_terminated', - field=models.DateTimeField(blank=True, null=True), - ), - migrations.AddField( - model_name='chatroom', - name='terminated_by', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='terminated_chatrooms', to=settings.AUTH_USER_MODEL), - ), - ] diff --git a/osinaweb/osichat/migrations/0018_visitorlog_remove_chatroomguest_mobile_number_and_more.py b/osinaweb/osichat/migrations/0018_visitorlog_remove_chatroomguest_mobile_number_and_more.py deleted file mode 100644 index 1682ddf3..00000000 --- a/osinaweb/osichat/migrations/0018_visitorlog_remove_chatroomguest_mobile_number_and_more.py +++ /dev/null @@ -1,72 +0,0 @@ -# Generated by Django 4.2.5 on 2024-08-02 19:36 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('osichat', '0017_chatroom_date_terminated_chatroom_terminated_by'), - ] - - operations = [ - migrations.CreateModel( - name='VisitorLog', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('url', models.URLField()), - ('referrer', models.URLField(blank=True, null=True)), - ('visit_date', models.DateTimeField(null=True)), - ('left_date', models.DateTimeField(null=True)), - ], - ), - migrations.RemoveField( - model_name='chatroomguest', - name='mobile_number', - ), - migrations.RemoveField( - model_name='chatroomguest', - name='name', - ), - migrations.RemoveField( - model_name='chatroomguest', - name='session_id', - ), - migrations.RemoveField( - model_name='visitor', - name='left_date', - ), - migrations.RemoveField( - model_name='visitor', - name='referrer', - ), - migrations.RemoveField( - model_name='visitor', - name='url', - ), - migrations.RemoveField( - model_name='visitor', - name='visit_date', - ), - migrations.AddField( - model_name='chatroomguest', - name='visitor', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='osichat.visitor'), - ), - migrations.AddField( - model_name='visitor', - name='email', - field=models.CharField(blank=True, max_length=100, null=True), - ), - migrations.AddField( - model_name='visitor', - name='mobile_number', - field=models.CharField(blank=True, max_length=10, null=True), - ), - migrations.AddField( - model_name='visitor', - name='name', - field=models.CharField(blank=True, max_length=200, null=True), - ), - ] diff --git a/osinaweb/osichat/migrations/0019_visitorlog_visitor.py b/osinaweb/osichat/migrations/0019_visitorlog_visitor.py deleted file mode 100644 index a5beeaf0..00000000 --- a/osinaweb/osichat/migrations/0019_visitorlog_visitor.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 4.2.5 on 2024-08-02 20:01 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('osichat', '0018_visitorlog_remove_chatroomguest_mobile_number_and_more'), - ] - - operations = [ - migrations.AddField( - model_name='visitorlog', - name='visitor', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='osichat.visitor'), - ), - ] diff --git a/osinaweb/osichat/migrations/0020_chatroomreview.py b/osinaweb/osichat/migrations/0020_chatroomreview.py deleted file mode 100644 index e5e00716..00000000 --- a/osinaweb/osichat/migrations/0020_chatroomreview.py +++ /dev/null @@ -1,22 +0,0 @@ -# Generated by Django 4.2.5 on 2024-08-03 08:33 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('osichat', '0019_visitorlog_visitor'), - ] - - operations = [ - migrations.CreateModel( - name='ChatRoomReview', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('reaction', models.CharField(choices=[('Happy', 'Happy'), ('Indifferent', 'Indifferent'), ('Sad', 'Sad')], max_length=50, null=True)), - ('room', models.OneToOneField(null=True, on_delete=django.db.models.deletion.CASCADE, to='osichat.chatroom')), - ], - ), - ] diff --git a/osinaweb/osichat/migrations/0021_chatroomreview_details.py b/osinaweb/osichat/migrations/0021_chatroomreview_details.py deleted file mode 100644 index c15385cd..00000000 --- a/osinaweb/osichat/migrations/0021_chatroomreview_details.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.2.5 on 2024-08-03 08:34 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('osichat', '0020_chatroomreview'), - ] - - operations = [ - migrations.AddField( - model_name='chatroomreview', - name='details', - field=models.TextField(blank=True, null=True), - ), - ] diff --git a/osinaweb/osichat/migrations/0022_visitorlog_title.py b/osinaweb/osichat/migrations/0022_visitorlog_title.py deleted file mode 100644 index 7f169dab..00000000 --- a/osinaweb/osichat/migrations/0022_visitorlog_title.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.2.5 on 2024-08-09 08:50 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('osichat', '0021_chatroomreview_details'), - ] - - operations = [ - migrations.AddField( - model_name='visitorlog', - name='title', - field=models.CharField(blank=True, max_length=500, null=True), - ), - ] diff --git a/osinaweb/osichat/migrations/0023_visitor_browser_name_visitor_os_name.py b/osinaweb/osichat/migrations/0023_visitor_browser_name_visitor_os_name.py deleted file mode 100644 index 7eb396a9..00000000 --- a/osinaweb/osichat/migrations/0023_visitor_browser_name_visitor_os_name.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 4.2.5 on 2024-08-09 09:21 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('osichat', '0022_visitorlog_title'), - ] - - operations = [ - migrations.AddField( - model_name='visitor', - name='browser_name', - field=models.CharField(blank=True, max_length=100, null=True), - ), - migrations.AddField( - model_name='visitor', - name='os_name', - field=models.CharField(blank=True, max_length=100, null=True), - ), - ] diff --git a/osinaweb/osichat/migrations/0024_chatotification.py b/osinaweb/osichat/migrations/0024_chatotification.py deleted file mode 100644 index 42ec0d60..00000000 --- a/osinaweb/osichat/migrations/0024_chatotification.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 4.2.5 on 2024-08-13 06:49 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('osichat', '0023_visitor_browser_name_visitor_os_name'), - ] - - operations = [ - migrations.CreateModel( - name='Chatotification', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(max_length=255)), - ('message', models.TextField()), - ('image', models.TextField(blank=True, null=True)), - ('created_at', models.DateTimeField(auto_now_add=True)), - ], - ), - ] diff --git a/osinaweb/osichat/migrations/0025_rename_chatotification_chatnotification.py b/osinaweb/osichat/migrations/0025_rename_chatotification_chatnotification.py deleted file mode 100644 index 40228beb..00000000 --- a/osinaweb/osichat/migrations/0025_rename_chatotification_chatnotification.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 4.2.5 on 2024-08-13 06:49 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('osichat', '0024_chatotification'), - ] - - operations = [ - migrations.RenameModel( - old_name='Chatotification', - new_name='ChatNotification', - ), - ] diff --git a/osinaweb/osichat/migrations/0026_visitor_region.py b/osinaweb/osichat/migrations/0026_visitor_region.py deleted file mode 100644 index 8f6388d7..00000000 --- a/osinaweb/osichat/migrations/0026_visitor_region.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.2.5 on 2024-08-14 08:41 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('osichat', '0025_rename_chatotification_chatnotification'), - ] - - operations = [ - migrations.AddField( - model_name='visitor', - name='region', - field=models.CharField(max_length=25, null=True), - ), - ] diff --git a/osinaweb/osichat/migrations/0027_chatnotification_type.py b/osinaweb/osichat/migrations/0027_chatnotification_type.py deleted file mode 100644 index 36c0817f..00000000 --- a/osinaweb/osichat/migrations/0027_chatnotification_type.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.2.5 on 2024-08-17 11:51 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('osichat', '0026_visitor_region'), - ] - - operations = [ - migrations.AddField( - model_name='chatnotification', - name='type', - field=models.CharField(choices=[('Visitor', 'Visitor'), ('Chat', 'Chat')], max_length=8, null=True), - ), - ] diff --git a/osinaweb/osichat/migrations/0028_chatnotification_type_id.py b/osinaweb/osichat/migrations/0028_chatnotification_type_id.py deleted file mode 100644 index 3676f028..00000000 --- a/osinaweb/osichat/migrations/0028_chatnotification_type_id.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.2.5 on 2024-09-03 09:54 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('osichat', '0027_chatnotification_type'), - ] - - operations = [ - migrations.AddField( - model_name='chatnotification', - name='type_id', - field=models.IntegerField(null=True), - ), - ] diff --git a/osinaweb/osichat/migrations/0029_chatnotification_session_id.py b/osinaweb/osichat/migrations/0029_chatnotification_session_id.py deleted file mode 100644 index 3a7ede4c..00000000 --- a/osinaweb/osichat/migrations/0029_chatnotification_session_id.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.2.5 on 2024-09-06 06:48 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('osichat', '0028_chatnotification_type_id'), - ] - - operations = [ - migrations.AddField( - model_name='chatnotification', - name='session_id', - field=models.CharField(max_length=200, null=True), - ), - ] diff --git a/osinaweb/osichat/migrations/0030_chatnotification_users.py b/osinaweb/osichat/migrations/0030_chatnotification_users.py deleted file mode 100644 index c5f67cab..00000000 --- a/osinaweb/osichat/migrations/0030_chatnotification_users.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 4.2.5 on 2024-10-01 16:25 - -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('osichat', '0029_chatnotification_session_id'), - ] - - operations = [ - migrations.AddField( - model_name='chatnotification', - name='users', - field=models.ManyToManyField(null=True, to=settings.AUTH_USER_MODEL), - ), - ] diff --git a/osinaweb/osichat/migrations/0031_alter_chatnotification_users.py b/osinaweb/osichat/migrations/0031_alter_chatnotification_users.py deleted file mode 100644 index 19f65e72..00000000 --- a/osinaweb/osichat/migrations/0031_alter_chatnotification_users.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 4.2.5 on 2024-10-01 16:25 - -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('osichat', '0030_chatnotification_users'), - ] - - operations = [ - migrations.AlterField( - model_name='chatnotification', - name='users', - field=models.ManyToManyField(blank=True, null=True, to=settings.AUTH_USER_MODEL), - ), - ] diff --git a/osinaweb/osichat/migrations/0032_remove_chatnotification_users_chatnotification_user.py b/osinaweb/osichat/migrations/0032_remove_chatnotification_users_chatnotification_user.py deleted file mode 100644 index d5fb4201..00000000 --- a/osinaweb/osichat/migrations/0032_remove_chatnotification_users_chatnotification_user.py +++ /dev/null @@ -1,25 +0,0 @@ -# Generated by Django 4.2.5 on 2024-10-01 16:40 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('osichat', '0031_alter_chatnotification_users'), - ] - - operations = [ - migrations.RemoveField( - model_name='chatnotification', - name='users', - ), - migrations.AddField( - model_name='chatnotification', - name='user', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), - ), - ] diff --git a/osinaweb/osichat/migrations/0033_chatconnection.py b/osinaweb/osichat/migrations/0033_chatconnection.py deleted file mode 100644 index 2da68df5..00000000 --- a/osinaweb/osichat/migrations/0033_chatconnection.py +++ /dev/null @@ -1,27 +0,0 @@ -# Generated by Django 4.2.5 on 2024-10-03 12:27 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('osichat', '0032_remove_chatnotification_users_chatnotification_user'), - ] - - operations = [ - migrations.CreateModel( - name='ChatConnection', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('date', models.DateTimeField(null=True)), - ('online', models.BooleanField(default=True)), - ('last_seen', models.DateTimeField(blank=True, null=True)), - ('disconnected', models.BooleanField(default=False)), - ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), - ], - ), - ] diff --git a/osinaweb/osichat/migrations/0034_chatroom_group_chatroom_visitor.py b/osinaweb/osichat/migrations/0034_chatroom_group_chatroom_visitor.py deleted file mode 100644 index 86678620..00000000 --- a/osinaweb/osichat/migrations/0034_chatroom_group_chatroom_visitor.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 4.2.5 on 2024-10-07 07:23 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('osichat', '0033_chatconnection'), - ] - - operations = [ - migrations.AddField( - model_name='chatroom', - name='group', - field=models.BooleanField(default=False), - ), - migrations.AddField( - model_name='chatroom', - name='visitor', - field=models.BooleanField(default=False), - ), - ] diff --git a/osinaweb/osichat/migrations/0035_remove_chatroom_group_remove_chatroom_visitor_and_more.py b/osinaweb/osichat/migrations/0035_remove_chatroom_group_remove_chatroom_visitor_and_more.py deleted file mode 100644 index f0272d2b..00000000 --- a/osinaweb/osichat/migrations/0035_remove_chatroom_group_remove_chatroom_visitor_and_more.py +++ /dev/null @@ -1,26 +0,0 @@ -# Generated by Django 4.2.5 on 2024-10-07 07:26 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('osichat', '0034_chatroom_group_chatroom_visitor'), - ] - - operations = [ - migrations.RemoveField( - model_name='chatroom', - name='group', - ), - migrations.RemoveField( - model_name='chatroom', - name='visitor', - ), - migrations.AddField( - model_name='chatroom', - name='type', - field=models.CharField(choices=[('DM', 'DM'), ('DM Group', 'DM Group'), ('Visitor Room', 'Visitor Room')], max_length=15, null=True), - ), - ] diff --git a/osinaweb/osichat/migrations/__init__.py b/osinaweb/osichat/migrations/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/osinaweb/osichat/migrations/__pycache__/0001_initial.cpython-310.pyc b/osinaweb/osichat/migrations/__pycache__/0001_initial.cpython-310.pyc deleted file mode 100644 index 20901b8c..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0001_initial.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0001_initial.cpython-311.pyc b/osinaweb/osichat/migrations/__pycache__/0001_initial.cpython-311.pyc deleted file mode 100644 index efef59cd..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0001_initial.cpython-311.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0001_initial.cpython-312.pyc b/osinaweb/osichat/migrations/__pycache__/0001_initial.cpython-312.pyc deleted file mode 100644 index 2c6ed233..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0001_initial.cpython-312.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0001_initial.cpython-313.pyc b/osinaweb/osichat/migrations/__pycache__/0001_initial.cpython-313.pyc deleted file mode 100644 index d4d950bf..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0001_initial.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0002_chatroom_guest_session_alter_chatroom_created_by_and_more.cpython-310.pyc b/osinaweb/osichat/migrations/__pycache__/0002_chatroom_guest_session_alter_chatroom_created_by_and_more.cpython-310.pyc deleted file mode 100644 index 3ee6ec27..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0002_chatroom_guest_session_alter_chatroom_created_by_and_more.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0002_chatroom_guest_session_alter_chatroom_created_by_and_more.cpython-311.pyc b/osinaweb/osichat/migrations/__pycache__/0002_chatroom_guest_session_alter_chatroom_created_by_and_more.cpython-311.pyc deleted file mode 100644 index d47bd2da..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0002_chatroom_guest_session_alter_chatroom_created_by_and_more.cpython-311.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0002_chatroom_guest_session_alter_chatroom_created_by_and_more.cpython-312.pyc b/osinaweb/osichat/migrations/__pycache__/0002_chatroom_guest_session_alter_chatroom_created_by_and_more.cpython-312.pyc deleted file mode 100644 index cb6b3d6f..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0002_chatroom_guest_session_alter_chatroom_created_by_and_more.cpython-312.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0002_chatroom_guest_session_alter_chatroom_created_by_and_more.cpython-313.pyc b/osinaweb/osichat/migrations/__pycache__/0002_chatroom_guest_session_alter_chatroom_created_by_and_more.cpython-313.pyc deleted file mode 100644 index cc6a0cd2..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0002_chatroom_guest_session_alter_chatroom_created_by_and_more.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0003_chatroomguest_remove_chatroom_guest_session.cpython-310.pyc b/osinaweb/osichat/migrations/__pycache__/0003_chatroomguest_remove_chatroom_guest_session.cpython-310.pyc deleted file mode 100644 index 71ee9c23..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0003_chatroomguest_remove_chatroom_guest_session.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0003_chatroomguest_remove_chatroom_guest_session.cpython-311.pyc b/osinaweb/osichat/migrations/__pycache__/0003_chatroomguest_remove_chatroom_guest_session.cpython-311.pyc deleted file mode 100644 index 5a791f13..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0003_chatroomguest_remove_chatroom_guest_session.cpython-311.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0003_chatroomguest_remove_chatroom_guest_session.cpython-312.pyc b/osinaweb/osichat/migrations/__pycache__/0003_chatroomguest_remove_chatroom_guest_session.cpython-312.pyc deleted file mode 100644 index 6c1dec4d..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0003_chatroomguest_remove_chatroom_guest_session.cpython-312.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0003_chatroomguest_remove_chatroom_guest_session.cpython-313.pyc b/osinaweb/osichat/migrations/__pycache__/0003_chatroomguest_remove_chatroom_guest_session.cpython-313.pyc deleted file mode 100644 index f44cef29..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0003_chatroomguest_remove_chatroom_guest_session.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0004_chatroomguest_room.cpython-310.pyc b/osinaweb/osichat/migrations/__pycache__/0004_chatroomguest_room.cpython-310.pyc deleted file mode 100644 index d39a1d1a..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0004_chatroomguest_room.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0004_chatroomguest_room.cpython-311.pyc b/osinaweb/osichat/migrations/__pycache__/0004_chatroomguest_room.cpython-311.pyc deleted file mode 100644 index f7e26130..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0004_chatroomguest_room.cpython-311.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0004_chatroomguest_room.cpython-312.pyc b/osinaweb/osichat/migrations/__pycache__/0004_chatroomguest_room.cpython-312.pyc deleted file mode 100644 index f3a8c05d..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0004_chatroomguest_room.cpython-312.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0004_chatroomguest_room.cpython-313.pyc b/osinaweb/osichat/migrations/__pycache__/0004_chatroomguest_room.cpython-313.pyc deleted file mode 100644 index bbfa643f..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0004_chatroomguest_room.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0005_alter_chatmessage_member.cpython-310.pyc b/osinaweb/osichat/migrations/__pycache__/0005_alter_chatmessage_member.cpython-310.pyc deleted file mode 100644 index 12893e24..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0005_alter_chatmessage_member.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0005_alter_chatmessage_member.cpython-311.pyc b/osinaweb/osichat/migrations/__pycache__/0005_alter_chatmessage_member.cpython-311.pyc deleted file mode 100644 index cce8c93f..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0005_alter_chatmessage_member.cpython-311.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0005_alter_chatmessage_member.cpython-312.pyc b/osinaweb/osichat/migrations/__pycache__/0005_alter_chatmessage_member.cpython-312.pyc deleted file mode 100644 index 07e3515e..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0005_alter_chatmessage_member.cpython-312.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0005_alter_chatmessage_member.cpython-313.pyc b/osinaweb/osichat/migrations/__pycache__/0005_alter_chatmessage_member.cpython-313.pyc deleted file mode 100644 index 66ceb055..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0005_alter_chatmessage_member.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0006_alter_chatmessage_content.cpython-310.pyc b/osinaweb/osichat/migrations/__pycache__/0006_alter_chatmessage_content.cpython-310.pyc deleted file mode 100644 index a1a0b775..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0006_alter_chatmessage_content.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0006_alter_chatmessage_content.cpython-311.pyc b/osinaweb/osichat/migrations/__pycache__/0006_alter_chatmessage_content.cpython-311.pyc deleted file mode 100644 index b66b1b98..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0006_alter_chatmessage_content.cpython-311.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0006_alter_chatmessage_content.cpython-312.pyc b/osinaweb/osichat/migrations/__pycache__/0006_alter_chatmessage_content.cpython-312.pyc deleted file mode 100644 index 81b73dff..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0006_alter_chatmessage_content.cpython-312.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0006_alter_chatmessage_content.cpython-313.pyc b/osinaweb/osichat/migrations/__pycache__/0006_alter_chatmessage_content.cpython-313.pyc deleted file mode 100644 index 3023bc02..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0006_alter_chatmessage_content.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0007_chatmessage_room.cpython-310.pyc b/osinaweb/osichat/migrations/__pycache__/0007_chatmessage_room.cpython-310.pyc deleted file mode 100644 index 42524147..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0007_chatmessage_room.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0007_chatmessage_room.cpython-311.pyc b/osinaweb/osichat/migrations/__pycache__/0007_chatmessage_room.cpython-311.pyc deleted file mode 100644 index 5ca48714..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0007_chatmessage_room.cpython-311.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0007_chatmessage_room.cpython-312.pyc b/osinaweb/osichat/migrations/__pycache__/0007_chatmessage_room.cpython-312.pyc deleted file mode 100644 index b9275af6..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0007_chatmessage_room.cpython-312.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0007_chatmessage_room.cpython-313.pyc b/osinaweb/osichat/migrations/__pycache__/0007_chatmessage_room.cpython-313.pyc deleted file mode 100644 index 9db807d9..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0007_chatmessage_room.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0008_alter_chatmessage_room.cpython-310.pyc b/osinaweb/osichat/migrations/__pycache__/0008_alter_chatmessage_room.cpython-310.pyc deleted file mode 100644 index 575c0121..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0008_alter_chatmessage_room.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0008_alter_chatmessage_room.cpython-311.pyc b/osinaweb/osichat/migrations/__pycache__/0008_alter_chatmessage_room.cpython-311.pyc deleted file mode 100644 index db6108c0..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0008_alter_chatmessage_room.cpython-311.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0008_alter_chatmessage_room.cpython-312.pyc b/osinaweb/osichat/migrations/__pycache__/0008_alter_chatmessage_room.cpython-312.pyc deleted file mode 100644 index bf188342..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0008_alter_chatmessage_room.cpython-312.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0008_alter_chatmessage_room.cpython-313.pyc b/osinaweb/osichat/migrations/__pycache__/0008_alter_chatmessage_room.cpython-313.pyc deleted file mode 100644 index 9fa829be..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0008_alter_chatmessage_room.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0009_visitor.cpython-310.pyc b/osinaweb/osichat/migrations/__pycache__/0009_visitor.cpython-310.pyc deleted file mode 100644 index babdd58b..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0009_visitor.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0009_visitor.cpython-311.pyc b/osinaweb/osichat/migrations/__pycache__/0009_visitor.cpython-311.pyc deleted file mode 100644 index 90671f65..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0009_visitor.cpython-311.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0009_visitor.cpython-312.pyc b/osinaweb/osichat/migrations/__pycache__/0009_visitor.cpython-312.pyc deleted file mode 100644 index 9a23c277..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0009_visitor.cpython-312.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0009_visitor.cpython-313.pyc b/osinaweb/osichat/migrations/__pycache__/0009_visitor.cpython-313.pyc deleted file mode 100644 index db88a3e3..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0009_visitor.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0010_visitor_left_date_visitor_visit_date.cpython-310.pyc b/osinaweb/osichat/migrations/__pycache__/0010_visitor_left_date_visitor_visit_date.cpython-310.pyc deleted file mode 100644 index 691036e5..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0010_visitor_left_date_visitor_visit_date.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0010_visitor_left_date_visitor_visit_date.cpython-311.pyc b/osinaweb/osichat/migrations/__pycache__/0010_visitor_left_date_visitor_visit_date.cpython-311.pyc deleted file mode 100644 index f7961b6e..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0010_visitor_left_date_visitor_visit_date.cpython-311.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0010_visitor_left_date_visitor_visit_date.cpython-312.pyc b/osinaweb/osichat/migrations/__pycache__/0010_visitor_left_date_visitor_visit_date.cpython-312.pyc deleted file mode 100644 index 67a1d474..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0010_visitor_left_date_visitor_visit_date.cpython-312.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0010_visitor_left_date_visitor_visit_date.cpython-313.pyc b/osinaweb/osichat/migrations/__pycache__/0010_visitor_left_date_visitor_visit_date.cpython-313.pyc deleted file mode 100644 index 5879df90..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0010_visitor_left_date_visitor_visit_date.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0011_visitor_country.cpython-310.pyc b/osinaweb/osichat/migrations/__pycache__/0011_visitor_country.cpython-310.pyc deleted file mode 100644 index e9ca1215..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0011_visitor_country.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0011_visitor_country.cpython-311.pyc b/osinaweb/osichat/migrations/__pycache__/0011_visitor_country.cpython-311.pyc deleted file mode 100644 index 8d5728f7..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0011_visitor_country.cpython-311.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0011_visitor_country.cpython-312.pyc b/osinaweb/osichat/migrations/__pycache__/0011_visitor_country.cpython-312.pyc deleted file mode 100644 index 7fd89ccd..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0011_visitor_country.cpython-312.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0011_visitor_country.cpython-313.pyc b/osinaweb/osichat/migrations/__pycache__/0011_visitor_country.cpython-313.pyc deleted file mode 100644 index 9713ab6d..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0011_visitor_country.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0012_alter_visitor_reference.cpython-310.pyc b/osinaweb/osichat/migrations/__pycache__/0012_alter_visitor_reference.cpython-310.pyc deleted file mode 100644 index e020409a..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0012_alter_visitor_reference.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0012_alter_visitor_reference.cpython-311.pyc b/osinaweb/osichat/migrations/__pycache__/0012_alter_visitor_reference.cpython-311.pyc deleted file mode 100644 index 13f85f51..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0012_alter_visitor_reference.cpython-311.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0012_alter_visitor_reference.cpython-312.pyc b/osinaweb/osichat/migrations/__pycache__/0012_alter_visitor_reference.cpython-312.pyc deleted file mode 100644 index b8cfc67b..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0012_alter_visitor_reference.cpython-312.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0012_alter_visitor_reference.cpython-313.pyc b/osinaweb/osichat/migrations/__pycache__/0012_alter_visitor_reference.cpython-313.pyc deleted file mode 100644 index a630986a..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0012_alter_visitor_reference.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0013_rename_reference_visitor_referrer.cpython-310.pyc b/osinaweb/osichat/migrations/__pycache__/0013_rename_reference_visitor_referrer.cpython-310.pyc deleted file mode 100644 index 16d38d4a..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0013_rename_reference_visitor_referrer.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0013_rename_reference_visitor_referrer.cpython-311.pyc b/osinaweb/osichat/migrations/__pycache__/0013_rename_reference_visitor_referrer.cpython-311.pyc deleted file mode 100644 index 6aa98ced..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0013_rename_reference_visitor_referrer.cpython-311.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0013_rename_reference_visitor_referrer.cpython-312.pyc b/osinaweb/osichat/migrations/__pycache__/0013_rename_reference_visitor_referrer.cpython-312.pyc deleted file mode 100644 index ec76ce38..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0013_rename_reference_visitor_referrer.cpython-312.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0013_rename_reference_visitor_referrer.cpython-313.pyc b/osinaweb/osichat/migrations/__pycache__/0013_rename_reference_visitor_referrer.cpython-313.pyc deleted file mode 100644 index 0a3d41f7..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0013_rename_reference_visitor_referrer.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0014_alter_chatmessageattachment_message.cpython-310.pyc b/osinaweb/osichat/migrations/__pycache__/0014_alter_chatmessageattachment_message.cpython-310.pyc deleted file mode 100644 index 783f6a03..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0014_alter_chatmessageattachment_message.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0014_alter_chatmessageattachment_message.cpython-312.pyc b/osinaweb/osichat/migrations/__pycache__/0014_alter_chatmessageattachment_message.cpython-312.pyc deleted file mode 100644 index 5f441f50..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0014_alter_chatmessageattachment_message.cpython-312.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0014_alter_chatmessageattachment_message.cpython-313.pyc b/osinaweb/osichat/migrations/__pycache__/0014_alter_chatmessageattachment_message.cpython-313.pyc deleted file mode 100644 index ad3aadfa..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0014_alter_chatmessageattachment_message.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0015_chatmessageseen_guest_alter_chatmessageseen_member.cpython-310.pyc b/osinaweb/osichat/migrations/__pycache__/0015_chatmessageseen_guest_alter_chatmessageseen_member.cpython-310.pyc deleted file mode 100644 index 9628a247..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0015_chatmessageseen_guest_alter_chatmessageseen_member.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0015_chatmessageseen_guest_alter_chatmessageseen_member.cpython-312.pyc b/osinaweb/osichat/migrations/__pycache__/0015_chatmessageseen_guest_alter_chatmessageseen_member.cpython-312.pyc deleted file mode 100644 index c7cb1439..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0015_chatmessageseen_guest_alter_chatmessageseen_member.cpython-312.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0015_chatmessageseen_guest_alter_chatmessageseen_member.cpython-313.pyc b/osinaweb/osichat/migrations/__pycache__/0015_chatmessageseen_guest_alter_chatmessageseen_member.cpython-313.pyc deleted file mode 100644 index de53017d..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0015_chatmessageseen_guest_alter_chatmessageseen_member.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0016_chatmessageseen_seen_date.cpython-310.pyc b/osinaweb/osichat/migrations/__pycache__/0016_chatmessageseen_seen_date.cpython-310.pyc deleted file mode 100644 index 78bebb2b..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0016_chatmessageseen_seen_date.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0016_chatmessageseen_seen_date.cpython-312.pyc b/osinaweb/osichat/migrations/__pycache__/0016_chatmessageseen_seen_date.cpython-312.pyc deleted file mode 100644 index c0b30e40..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0016_chatmessageseen_seen_date.cpython-312.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0016_chatmessageseen_seen_date.cpython-313.pyc b/osinaweb/osichat/migrations/__pycache__/0016_chatmessageseen_seen_date.cpython-313.pyc deleted file mode 100644 index b02d42bc..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0016_chatmessageseen_seen_date.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0017_chatroom_date_terminated_chatroom_terminated_by.cpython-310.pyc b/osinaweb/osichat/migrations/__pycache__/0017_chatroom_date_terminated_chatroom_terminated_by.cpython-310.pyc deleted file mode 100644 index 02b9f5e2..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0017_chatroom_date_terminated_chatroom_terminated_by.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0017_chatroom_date_terminated_chatroom_terminated_by.cpython-312.pyc b/osinaweb/osichat/migrations/__pycache__/0017_chatroom_date_terminated_chatroom_terminated_by.cpython-312.pyc deleted file mode 100644 index f1c9cc7a..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0017_chatroom_date_terminated_chatroom_terminated_by.cpython-312.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0017_chatroom_date_terminated_chatroom_terminated_by.cpython-313.pyc b/osinaweb/osichat/migrations/__pycache__/0017_chatroom_date_terminated_chatroom_terminated_by.cpython-313.pyc deleted file mode 100644 index f6c97b63..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0017_chatroom_date_terminated_chatroom_terminated_by.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0018_visitorlog_remove_chatroomguest_mobile_number_and_more.cpython-310.pyc b/osinaweb/osichat/migrations/__pycache__/0018_visitorlog_remove_chatroomguest_mobile_number_and_more.cpython-310.pyc deleted file mode 100644 index 895c4ffd..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0018_visitorlog_remove_chatroomguest_mobile_number_and_more.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0018_visitorlog_remove_chatroomguest_mobile_number_and_more.cpython-312.pyc b/osinaweb/osichat/migrations/__pycache__/0018_visitorlog_remove_chatroomguest_mobile_number_and_more.cpython-312.pyc deleted file mode 100644 index 8c52caab..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0018_visitorlog_remove_chatroomguest_mobile_number_and_more.cpython-312.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0018_visitorlog_remove_chatroomguest_mobile_number_and_more.cpython-313.pyc b/osinaweb/osichat/migrations/__pycache__/0018_visitorlog_remove_chatroomguest_mobile_number_and_more.cpython-313.pyc deleted file mode 100644 index 0a0334ac..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0018_visitorlog_remove_chatroomguest_mobile_number_and_more.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0019_visitorlog_visitor.cpython-310.pyc b/osinaweb/osichat/migrations/__pycache__/0019_visitorlog_visitor.cpython-310.pyc deleted file mode 100644 index cb347b1a..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0019_visitorlog_visitor.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0019_visitorlog_visitor.cpython-312.pyc b/osinaweb/osichat/migrations/__pycache__/0019_visitorlog_visitor.cpython-312.pyc deleted file mode 100644 index f61c89cf..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0019_visitorlog_visitor.cpython-312.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0019_visitorlog_visitor.cpython-313.pyc b/osinaweb/osichat/migrations/__pycache__/0019_visitorlog_visitor.cpython-313.pyc deleted file mode 100644 index d6d44417..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0019_visitorlog_visitor.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0020_chatroomreview.cpython-310.pyc b/osinaweb/osichat/migrations/__pycache__/0020_chatroomreview.cpython-310.pyc deleted file mode 100644 index d570f3e1..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0020_chatroomreview.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0020_chatroomreview.cpython-312.pyc b/osinaweb/osichat/migrations/__pycache__/0020_chatroomreview.cpython-312.pyc deleted file mode 100644 index 6c3ae924..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0020_chatroomreview.cpython-312.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0020_chatroomreview.cpython-313.pyc b/osinaweb/osichat/migrations/__pycache__/0020_chatroomreview.cpython-313.pyc deleted file mode 100644 index d4f16c20..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0020_chatroomreview.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0021_chatroomreview_details.cpython-310.pyc b/osinaweb/osichat/migrations/__pycache__/0021_chatroomreview_details.cpython-310.pyc deleted file mode 100644 index 119b3630..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0021_chatroomreview_details.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0021_chatroomreview_details.cpython-312.pyc b/osinaweb/osichat/migrations/__pycache__/0021_chatroomreview_details.cpython-312.pyc deleted file mode 100644 index 78444710..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0021_chatroomreview_details.cpython-312.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0021_chatroomreview_details.cpython-313.pyc b/osinaweb/osichat/migrations/__pycache__/0021_chatroomreview_details.cpython-313.pyc deleted file mode 100644 index da09557b..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0021_chatroomreview_details.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0022_visitorlog_title.cpython-310.pyc b/osinaweb/osichat/migrations/__pycache__/0022_visitorlog_title.cpython-310.pyc deleted file mode 100644 index 7f8b726c..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0022_visitorlog_title.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0022_visitorlog_title.cpython-312.pyc b/osinaweb/osichat/migrations/__pycache__/0022_visitorlog_title.cpython-312.pyc deleted file mode 100644 index 501319dd..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0022_visitorlog_title.cpython-312.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0022_visitorlog_title.cpython-313.pyc b/osinaweb/osichat/migrations/__pycache__/0022_visitorlog_title.cpython-313.pyc deleted file mode 100644 index 47977886..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0022_visitorlog_title.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0023_visitor_browser_name_visitor_os_name.cpython-310.pyc b/osinaweb/osichat/migrations/__pycache__/0023_visitor_browser_name_visitor_os_name.cpython-310.pyc deleted file mode 100644 index 6621ea11..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0023_visitor_browser_name_visitor_os_name.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0023_visitor_browser_name_visitor_os_name.cpython-312.pyc b/osinaweb/osichat/migrations/__pycache__/0023_visitor_browser_name_visitor_os_name.cpython-312.pyc deleted file mode 100644 index 752edab2..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0023_visitor_browser_name_visitor_os_name.cpython-312.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0023_visitor_browser_name_visitor_os_name.cpython-313.pyc b/osinaweb/osichat/migrations/__pycache__/0023_visitor_browser_name_visitor_os_name.cpython-313.pyc deleted file mode 100644 index 00b24902..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0023_visitor_browser_name_visitor_os_name.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0024_chatotification.cpython-310.pyc b/osinaweb/osichat/migrations/__pycache__/0024_chatotification.cpython-310.pyc deleted file mode 100644 index ca5e2958..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0024_chatotification.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0024_chatotification.cpython-312.pyc b/osinaweb/osichat/migrations/__pycache__/0024_chatotification.cpython-312.pyc deleted file mode 100644 index 9a05cfe3..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0024_chatotification.cpython-312.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0024_chatotification.cpython-313.pyc b/osinaweb/osichat/migrations/__pycache__/0024_chatotification.cpython-313.pyc deleted file mode 100644 index e9eab8aa..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0024_chatotification.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0025_rename_chatotification_chatnotification.cpython-310.pyc b/osinaweb/osichat/migrations/__pycache__/0025_rename_chatotification_chatnotification.cpython-310.pyc deleted file mode 100644 index 25fa41c1..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0025_rename_chatotification_chatnotification.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0025_rename_chatotification_chatnotification.cpython-312.pyc b/osinaweb/osichat/migrations/__pycache__/0025_rename_chatotification_chatnotification.cpython-312.pyc deleted file mode 100644 index 20fc828f..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0025_rename_chatotification_chatnotification.cpython-312.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0025_rename_chatotification_chatnotification.cpython-313.pyc b/osinaweb/osichat/migrations/__pycache__/0025_rename_chatotification_chatnotification.cpython-313.pyc deleted file mode 100644 index ee7f9cf4..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0025_rename_chatotification_chatnotification.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0026_visitor_region.cpython-310.pyc b/osinaweb/osichat/migrations/__pycache__/0026_visitor_region.cpython-310.pyc deleted file mode 100644 index 8aba71a7..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0026_visitor_region.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0026_visitor_region.cpython-312.pyc b/osinaweb/osichat/migrations/__pycache__/0026_visitor_region.cpython-312.pyc deleted file mode 100644 index b8a23556..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0026_visitor_region.cpython-312.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0026_visitor_region.cpython-313.pyc b/osinaweb/osichat/migrations/__pycache__/0026_visitor_region.cpython-313.pyc deleted file mode 100644 index 61aec2c2..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0026_visitor_region.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0027_chatnotification_type.cpython-310.pyc b/osinaweb/osichat/migrations/__pycache__/0027_chatnotification_type.cpython-310.pyc deleted file mode 100644 index b5e65e2f..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0027_chatnotification_type.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0027_chatnotification_type.cpython-312.pyc b/osinaweb/osichat/migrations/__pycache__/0027_chatnotification_type.cpython-312.pyc deleted file mode 100644 index 5e6f12c8..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0027_chatnotification_type.cpython-312.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0027_chatnotification_type.cpython-313.pyc b/osinaweb/osichat/migrations/__pycache__/0027_chatnotification_type.cpython-313.pyc deleted file mode 100644 index 8e796683..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0027_chatnotification_type.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0028_chatnotification_type_id.cpython-310.pyc b/osinaweb/osichat/migrations/__pycache__/0028_chatnotification_type_id.cpython-310.pyc deleted file mode 100644 index 6882a664..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0028_chatnotification_type_id.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0028_chatnotification_type_id.cpython-313.pyc b/osinaweb/osichat/migrations/__pycache__/0028_chatnotification_type_id.cpython-313.pyc deleted file mode 100644 index c5b83166..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0028_chatnotification_type_id.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0029_chatnotification_session_id.cpython-310.pyc b/osinaweb/osichat/migrations/__pycache__/0029_chatnotification_session_id.cpython-310.pyc deleted file mode 100644 index 3d77b1e5..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0029_chatnotification_session_id.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0029_chatnotification_session_id.cpython-313.pyc b/osinaweb/osichat/migrations/__pycache__/0029_chatnotification_session_id.cpython-313.pyc deleted file mode 100644 index 773002b5..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0029_chatnotification_session_id.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0030_chatnotification_users.cpython-310.pyc b/osinaweb/osichat/migrations/__pycache__/0030_chatnotification_users.cpython-310.pyc deleted file mode 100644 index 382786c5..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0030_chatnotification_users.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0030_chatnotification_users.cpython-313.pyc b/osinaweb/osichat/migrations/__pycache__/0030_chatnotification_users.cpython-313.pyc deleted file mode 100644 index 97f47dad..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0030_chatnotification_users.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0031_alter_chatnotification_users.cpython-310.pyc b/osinaweb/osichat/migrations/__pycache__/0031_alter_chatnotification_users.cpython-310.pyc deleted file mode 100644 index 716a1e12..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0031_alter_chatnotification_users.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0031_alter_chatnotification_users.cpython-313.pyc b/osinaweb/osichat/migrations/__pycache__/0031_alter_chatnotification_users.cpython-313.pyc deleted file mode 100644 index f9f84bca..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0031_alter_chatnotification_users.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0032_remove_chatnotification_users_chatnotification_user.cpython-310.pyc b/osinaweb/osichat/migrations/__pycache__/0032_remove_chatnotification_users_chatnotification_user.cpython-310.pyc deleted file mode 100644 index 431e3de7..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0032_remove_chatnotification_users_chatnotification_user.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0032_remove_chatnotification_users_chatnotification_user.cpython-313.pyc b/osinaweb/osichat/migrations/__pycache__/0032_remove_chatnotification_users_chatnotification_user.cpython-313.pyc deleted file mode 100644 index da6b0cdc..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0032_remove_chatnotification_users_chatnotification_user.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0033_chatconnection.cpython-310.pyc b/osinaweb/osichat/migrations/__pycache__/0033_chatconnection.cpython-310.pyc deleted file mode 100644 index de4b7e70..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0033_chatconnection.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0033_chatconnection.cpython-313.pyc b/osinaweb/osichat/migrations/__pycache__/0033_chatconnection.cpython-313.pyc deleted file mode 100644 index a23f2df1..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0033_chatconnection.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0034_chatroom_group_chatroom_visitor.cpython-310.pyc b/osinaweb/osichat/migrations/__pycache__/0034_chatroom_group_chatroom_visitor.cpython-310.pyc deleted file mode 100644 index fd9ee60d..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0034_chatroom_group_chatroom_visitor.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0034_chatroom_group_chatroom_visitor.cpython-313.pyc b/osinaweb/osichat/migrations/__pycache__/0034_chatroom_group_chatroom_visitor.cpython-313.pyc deleted file mode 100644 index 0c651bb8..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0034_chatroom_group_chatroom_visitor.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0035_remove_chatroom_group_remove_chatroom_visitor_and_more.cpython-310.pyc b/osinaweb/osichat/migrations/__pycache__/0035_remove_chatroom_group_remove_chatroom_visitor_and_more.cpython-310.pyc deleted file mode 100644 index 1327e0f1..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0035_remove_chatroom_group_remove_chatroom_visitor_and_more.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/0035_remove_chatroom_group_remove_chatroom_visitor_and_more.cpython-313.pyc b/osinaweb/osichat/migrations/__pycache__/0035_remove_chatroom_group_remove_chatroom_visitor_and_more.cpython-313.pyc deleted file mode 100644 index 025255fe..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/0035_remove_chatroom_group_remove_chatroom_visitor_and_more.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/__init__.cpython-310.pyc b/osinaweb/osichat/migrations/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index 309abe7c..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/__init__.cpython-310.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/__init__.cpython-311.pyc b/osinaweb/osichat/migrations/__pycache__/__init__.cpython-311.pyc deleted file mode 100644 index 2b13832a..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/__init__.cpython-311.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/__init__.cpython-312.pyc b/osinaweb/osichat/migrations/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 8352214b..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/__init__.cpython-312.pyc and /dev/null differ diff --git a/osinaweb/osichat/migrations/__pycache__/__init__.cpython-313.pyc b/osinaweb/osichat/migrations/__pycache__/__init__.cpython-313.pyc deleted file mode 100644 index 119cbcf4..00000000 Binary files a/osinaweb/osichat/migrations/__pycache__/__init__.cpython-313.pyc and /dev/null differ diff --git a/osinaweb/osichat/models.py b/osinaweb/osichat/models.py deleted file mode 100644 index 3687532d..00000000 --- a/osinaweb/osichat/models.py +++ /dev/null @@ -1,395 +0,0 @@ -from django.db import models -from osinacore.models import * -import mimetypes -import os -from channels.layers import get_channel_layer -from asgiref.sync import async_to_sync -from fcm_django.models import FCMDevice -from firebase_admin.messaging import Message,AndroidConfig,APNSConfig,APNSPayload,ApsAlert,Aps,AndroidNotification, Notification as NotificationFB -from django.utils.safestring import mark_safe - - - -def send_notification(notification): - notification_data = { - 'title': notification.title, - 'body': mark_safe(notification.message), - } - - if notification.type == 'Chat': - sound = 'outside_chat.wav' - android_sound = 'outside_chat' - android_channel_id = 'chat' - else: - sound = 'new_visitor.wav' - android_sound = 'new_visitor' - android_channel_id = 'visitor' - - android_config = AndroidConfig( - notification=AndroidNotification( - title=notification_data['title'], - body=notification_data['body'], - sound=android_sound, - channel_id=android_channel_id - ) - ) - - apns_config = APNSConfig( - payload=APNSPayload( - aps=Aps( - alert=ApsAlert( - title=notification_data['title'], - body=notification_data['body'], - ), - sound=sound, - ) - ) - ) - - message = Message( - notification=NotificationFB( - title=notification_data['title'], - body=notification_data['body'], - image=notification.image if notification.image else None, - ), - data={"id": str(notification.type_id), "type": notification.type, "session_id": notification.session_id}, - android=android_config, - apns=apns_config - ) - - if notification.user: - FCMDevice.objects.filter(user=notification.user).send_message(message) - else: - FCMDevice.objects.send_message(message) - - - -# Create your models here. -class ChatNotification(models.Model): - TYPES = ( - ('Visitor', 'Visitor'), - ('Chat', 'Chat') - ) - title = models.CharField(max_length=255) - message = models.TextField() - image = models.TextField(blank=True,null=True) - created_at = models.DateTimeField(auto_now_add=True) - type = models.CharField(max_length=8, choices=TYPES, null=True) - type_id = models.IntegerField(null=True) - session_id = models.CharField(max_length=200, null=True) - user = models.ForeignKey(User, blank=True, null=True, on_delete=models.CASCADE) - def save(self, *args, **kwargs): - is_new = not self.pk - super().save(*args, **kwargs) - if is_new: - send_notification(self) - - -class Visitor(models.Model): - session_id = models.CharField(max_length=300) - ip_address = models.CharField(max_length=300) - country = models.CharField(max_length=15, null=True) - region = models.CharField(max_length=25, null=True) - name = models.CharField(max_length=200, blank=True, null=True) - mobile_number = models.CharField(max_length=10, null=True, blank=True) - email = models.CharField(max_length=100, null=True, blank=True) - browser_name = models.CharField(max_length=100, null=True, blank=True) - os_name = models.CharField(max_length=100, null=True, blank=True) - @property - def flag_image_url(self): - flag_url = f"https://osina.ositcom.com/static/images/flags/{self.country.lower()}.svg" - return flag_url - @property - def notification_flag_image_url(self): - flag_url = f"https://flagcdn.com/w640/{self.country.lower()}.png" - return flag_url - @property - def is_online(self): - latest_log = self.visitorlog_set.order_by('-visit_date').first() - if latest_log and latest_log.left_date is None: - return True - return False - @property - def total_duration(self): - total_seconds = 0 - for log in self.visitorlog_set.all(): - end_time = log.left_date if log.left_date else timezone.now() - total_seconds += (end_time - log.visit_date).total_seconds() - - duration = timedelta(seconds=total_seconds) - hours, remainder = divmod(duration.total_seconds(), 3600) - minutes, seconds = divmod(remainder, 60) - - if hours >= 1: - return f"{int(hours):02}:{int(minutes):02}:{int(seconds):02}" - else: - return f"{int(minutes):02}:{int(seconds):02}" - - - - - -class VisitorLog(models.Model): - visitor = models.ForeignKey(Visitor, on_delete=models.CASCADE, null=True) - url = models.URLField() - title = models.CharField(null=True, blank=True, max_length=500) - referrer = models.URLField(null=True, blank=True) - visit_date = models.DateTimeField(null=True) - left_date = models.DateTimeField(null=True) - @property - def log_duration(self): - end_time = self.left_date if self.left_date else timezone.now() - total_seconds = (end_time - self.visit_date).total_seconds() - - duration = timedelta(seconds=total_seconds) - hours, remainder = divmod(duration.total_seconds(), 3600) - minutes, seconds = divmod(remainder, 60) - - if hours >= 1: - return f"{int(hours):02}:{int(minutes):02}:{int(seconds):02}" - else: - return f"{int(minutes):02}:{int(seconds):02}" - - def save(self, *args, **kwargs): - is_first_log = self.visitor.visitorlog_set.count() == 0 - if self.left_date: - action = 'end_log' - else: - action = 'new_log' - super().save(*args, **kwargs) - channel_layer = get_channel_layer() - event = { - 'type': 'new_visitor_update_handler', - 'visitor_id': self.visitor.id, - 'action': action - } - async_to_sync(channel_layer.group_send)("osichat", event) - group_name = f"V{self.visitor.id}" - async_to_sync(channel_layer.group_send)(group_name, event) - if not self.left_date: - if is_first_log: - self.send_visitor_notification() - else: - last_log = self.visitor.visitorlog_set.exclude(id=self.id).order_by('-visit_date').first() - if last_log: - last_visit_date = last_log.visit_date - current_visit_date = self.visit_date - if timezone.is_naive(last_visit_date): - last_visit_date = timezone.make_aware(last_visit_date) - if timezone.is_naive(current_visit_date): - current_visit_date = timezone.make_aware(current_visit_date) - - time_difference = current_visit_date - last_visit_date - - if time_difference > timedelta(minutes=5): - self.send_visitor_notification(is_repeat=True) - - def send_visitor_notification(self, is_repeat=False): - type_id = self.visitor.id - session_id = self.visitor.session_id - if is_repeat: - title = "Existing visitor new acitivity on Ositcom!" - if self.title: - body = f"Visitor navigated to {self.title}" - elif self.url: - body = f"Visitor returned to {self.url}" - else: - title = "New visitor on Ositcom!" - if self.title: - body = f"New visitor navigated to {self.title}" - elif self.url: - body = f"New visitor navigated to {self.url}" - notification = ChatNotification.objects.create( - title=title, - message = body, - image = self.visitor.notification_flag_image_url, - type = "Visitor", - type_id = type_id, - session_id=session_id - - ) - - - -class ChatConnection(models.Model): - date = models.DateTimeField(null=True) - user = models.OneToOneField(User, on_delete=models.CASCADE) - online = models.BooleanField(default=True) - last_seen = models.DateTimeField(null=True, blank=True) - disconnected = models.BooleanField(default=False) - def save(self, *args, **kwargs): - super().save(*args, **kwargs) - channel_layer = get_channel_layer() - event = { - 'type': 'new_online_activity_handler', - 'connection_id': self.id, - } - async_to_sync(channel_layer.group_send)("osichat", event) - - - -def get_chat_last_seen(user): - connection = ChatConnection.objects.filter(user=user).last() - if not connection: - return "Not seen yet" - - if connection.online: - return "Online" - last_seen_time = connection.last_seen - now = timezone.now() - time_diff = now - last_seen_time - if time_diff < timedelta(days=1): - if last_seen_time.date() == now.date(): - return f"last seen today at {last_seen_time.strftime('%I:%M %p')}" - else: - return f"last seen yesterday at {last_seen_time.strftime('%I:%M %p')}" - else: - return f"last seen on {last_seen_time.strftime('%b %d at %I:%M %p')}" - - - -class ChatRoom(models.Model): - TYPE_CHOICES = ( - ('DM', 'DM'), - ('DM Group', 'DM Group'), - ('Visitor Room', 'Visitor Room'), - ) - name = models.CharField(max_length=300) - created_by = models.ForeignKey(User, null=True, on_delete=models.SET_NULL, blank=True) - date_created = models.DateTimeField() - terminated_by = models.ForeignKey(User, null=True, on_delete=models.SET_NULL, blank=True, related_name='terminated_chatrooms') - date_terminated = models.DateTimeField(null=True, blank=True) - type = models.CharField(max_length=15, choices=TYPE_CHOICES, null=True) - @property - def last_updated(self): - last_message = ChatMessage.objects.filter(room=self).order_by('-date_sent').first() - if last_message: - last_updated_time = last_message.date_sent - else: - last_updated_time = self.date_created - - now = datetime.now() - if last_updated_time.date() == now.date(): - return last_updated_time.strftime('%I:%M %p') - else: - return last_updated_time.strftime('%d-%m-%Y') - def unread_messages(self, user): - return ChatMessage.objects.filter(room=self).exclude(member=user).exclude(chatmessageseen__member=user).count() - def save(self, *args, **kwargs): - super().save(*args, **kwargs) - channel_layer = get_channel_layer() - event = { - 'type': 'new_chat_update_handler', - 'chatroom_id': self.id, - } - async_to_sync(channel_layer.group_send)("osichat", event) - - - -class ChatRoomGuest(models.Model): - room = models.OneToOneField(ChatRoom, on_delete=models.CASCADE, null=True) - visitor = models.ForeignKey(Visitor, null=True, on_delete=models.CASCADE) - def save(self, *args, **kwargs): - super().save(*args, **kwargs) - self.send_chat_notification() - def send_chat_notification(self): - type_id = self.room.id - session_id = self.visitor.session_id - title = "New chat on Ositcom!" - body = f"Visitor {self.visitor.ip_address} started a new chat on Ositcom" - notification = ChatNotification.objects.create( - title=title, - message = body, - image = self.visitor.notification_flag_image_url, - type = "Chat", - type_id = type_id, - session_id = session_id - ) - -class ChatRoomReview(models.Model): - REACTION_CHOICES = ( - ('Happy', 'Happy'), - ('Indifferent', 'Indifferent'), - ('Sad', 'Sad'), - ) - room = models.OneToOneField(ChatRoom, on_delete=models.CASCADE, null=True) - reaction = models.CharField(max_length=50, choices=REACTION_CHOICES, null=True) - details = models.TextField(null=True, blank=True) - -class ChatMember(models.Model): - member = models.ForeignKey(User, on_delete=models.CASCADE) - room = models.ForeignKey(ChatRoom, on_delete=models.CASCADE) - date_joined = models.DateTimeField() - - -class ChatProject(models.Model): - room = models.OneToOneField(ChatRoom, on_delete=models.CASCADE) - project = models.ForeignKey(Project, on_delete=models.CASCADE) - public = models.BooleanField() - - -class ChatMessage(models.Model): - room = models.ForeignKey(ChatRoom, on_delete=models.CASCADE, null=True) - member = models.ForeignKey(User, null=True, on_delete=models.SET_NULL, blank=True) - content = models.TextField(null=True, blank=True) - date_sent = models.DateTimeField() - def save(self, *args, **kwargs): - super().save(*args, **kwargs) - channel_layer = get_channel_layer() - event = { - 'type': 'new_chat_update_handler', - 'chatroom_id': self.room.id, - } - async_to_sync(channel_layer.group_send)("osichat", event) - if not self.member: - self.send_message_notification() - def send_message_notification(self): - type_id = self.room.id - - if self.room.chatroomguest: - session_id = self.room.chatroomguest.visitor.session_id - notification = ChatNotification.objects.create( - title=f"Visitor {self.room.chatroomguest.visitor.ip_address} sent a new message on Ositcom!", - message = f"{self.content}", - image = self.room.chatroomguest.visitor.notification_flag_image_url, - type = "Chat", - type_id = type_id, - session_id = session_id - ) - - else: - chat_members = ChatMember.objects.filter(room=self.room).exclude(member=self.member) - for chat_member in chat_members: - user = chat_member.member - notification = ChatNotification.objects.create( - title=f"New message from {self.member.first_name} {self.member.last_name}!", - message= f"{self.content}", - image = user.staffprofile.image.url if user.staffprofile and user.staffprofile.image else None, - type="Chat", - type_id=self.room.id, - user=user - ) - - -class ChatMessageAttachment(models.Model): - message = models.OneToOneField(ChatMessage, on_delete=models.CASCADE) - attachment = models.TextField() - def is_image(self): - mime_type, _ = mimetypes.guess_type(self.attachment) - return mime_type and mime_type.startswith('image') - @property - def file_name(self): - return os.path.basename(self.attachment) - - -class ChatMessageReaction(models.Model): - message = models.ForeignKey(ChatMessage, on_delete=models.CASCADE) - member = models.ForeignKey(User, on_delete=models.CASCADE) - reaction = models.CharField(max_length=200) - - -class ChatMessageSeen(models.Model): - message = models.ForeignKey(ChatMessage, on_delete=models.CASCADE) - member = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True) - guest = models.ForeignKey(ChatRoomGuest, on_delete=models.CASCADE, null=True, blank=True) - seen_date = models.DateTimeField(null=True) \ No newline at end of file diff --git a/osinaweb/osichat/routing.py b/osinaweb/osichat/routing.py deleted file mode 100644 index c2db6e69..00000000 --- a/osinaweb/osichat/routing.py +++ /dev/null @@ -1,11 +0,0 @@ -from django.urls import path -from .consumers import * - -websocket_urlpatterns = [ - path("ws/osichat/visitors/", OsitcomVisitor.as_asgi()), - path("ws/osichat/", Osichat.as_asgi()), - path("ws/osichat//", OsitcomChatRoom.as_asgi()), - path("ws/osichat-admin//", OsitcomChatRoom.as_asgi()), - path("ws/visitors/osichat-admin//", OsichatVisitor.as_asgi()), - -] \ No newline at end of file diff --git a/osinaweb/osichat/templates/chat-room.html b/osinaweb/osichat/templates/chat-room.html deleted file mode 100644 index 807e0830..00000000 --- a/osinaweb/osichat/templates/chat-room.html +++ /dev/null @@ -1,177 +0,0 @@ -{%load static%} - - - - -
- - -
- -
-
-
- - - - - - - - - - - - -
-
-
-

{% if chat_room.chatroomguest.visitor.name %}Hello {{chat_room.chatroomguest.visitor.name}},{% else %}Hello,{% endif %} thank you for contacting us. Please bear with us while we - connect you with the next available agent as soon as possible.

-
-
- - -
- {% for message in chat_room_messages %} - - {% if message.member %} -
-
-
- {% if message.member.staffprofile.image %} - - {% else %} -

{{message.member.first_name.0}}{{message.member.last_name.0}}

- {% endif %} -
-
- {% if not message.chatmessageattachment %} -
-

{{message.content}}

-
- {% else %} - {% if message.chatmessageattachment.is_image %} -
- -
- {% else %} -
-
-
- - - - - -
-
- {{message.chatmessageattachment.file_name}} -
-
-
- {% endif %} - {% endif %} -
- - - {% else %} - {% if not message.chatmessageattachment %} -
-
-

{{message.content}}

-
-
- {% else %} - {% if message.chatmessageattachment.is_image %} -
-
- -
-
- {% else %} -
-
-
-
- - - - - -
-
- {{message.chatmessageattachment.file_name}} -
-
-
-
- {% endif %} - {% endif %} - {% endif %} - {% endfor %} -
- - -
- -
- {% csrf_token %} -
- - - -
-
- - - - - -
- -
-
-
- - -
- - -

Osichat 2.0 by Ositcom

-
-
\ No newline at end of file diff --git a/osinaweb/osichat/templates/chat-widget.html b/osinaweb/osichat/templates/chat-widget.html deleted file mode 100644 index c30f5d6c..00000000 --- a/osinaweb/osichat/templates/chat-widget.html +++ /dev/null @@ -1,131 +0,0 @@ -{% load static %} - - - - - - -
-
- - - -
- - - - - -

Chat with us

-
- - - - \ No newline at end of file diff --git a/osinaweb/osichat/templates/ended-chat.html b/osinaweb/osichat/templates/ended-chat.html deleted file mode 100644 index a130f88a..00000000 --- a/osinaweb/osichat/templates/ended-chat.html +++ /dev/null @@ -1,409 +0,0 @@ - - -
-
- -
-
-
- - - - - - - - - - - - -
-
-
-

{% if chat_room.chatroomguest.visitor.name %}Hello {{chat_room.chatroomguest.visitor.name}},{% else %}Hello,{% endif %} thank you for contacting us. Please bear with us while we - connect you with the next available agent as soon as possible.

-
-
- -
- {% for message in chat_room_messages %} - - {% if message.member %} -
-
-
- {% if message.member.staffprofile.image %} - - {% else %} -

{{message.member.first_name.0}}{{message.member.last_name.0}}

- {% endif %} -
-
- {% if not message.chatmessageattachment %} -
-

{{message.content}}

-
- {% else %} - {% if message.chatmessageattachment.is_image %} -
- -
- {% else %} -
-
-
- - - - - - -
-
- {{message.chatmessageattachment.file_name}} -
-
-
- {% endif %} - {% endif %} -
- - - {% else %} - {% if not message.chatmessageattachment %} -
-
-

{{message.content}}

-
-
- {% else %} - {% if message.chatmessageattachment.is_image %} -
-
- -
-
- {% else %} -
-
-
-
- - - - - - -
-
- {{message.chatmessageattachment.file_name}} -
-
-
-
- {% endif %} - {% endif %} - {% endif %} - {% endfor %} - - - -
- {% if not chat_room.chatroomreview %} -
-
-
- - - - - - - - - - - - -
-
- -
-

Rate your conversation

- -
- - - - - - -
- - -
- {% csrf_token %} -
- - -
- -
-
-
-
-
- {% else %} - {% include 'partials/submitted-review.html' %} - {% endif %} -
-
-
- - -
- -
- -
- - - -
- - -

Osichat 2.0 by Ositcom

-
-
- -
- - -{% block form %} - -{% endblock form %} \ No newline at end of file diff --git a/osinaweb/osichat/templates/partials/message-attachment.html b/osinaweb/osichat/templates/partials/message-attachment.html deleted file mode 100644 index 48df8823..00000000 --- a/osinaweb/osichat/templates/partials/message-attachment.html +++ /dev/null @@ -1,63 +0,0 @@ -{% if message_attachment.message.member %} -
-
-
- {% if message_attachment.message.member.staffprofile.image %} - - {% else %} -

{{message_attachment.message.member.first_name.0}}{{message_attachment.message.member.last_name.0}}

- {% endif %} -
-
- {% if file_type == 'image' %} -
- -
- {% else %} -
-
-
- - - - - -
-
- {{message_attachment.file_name}} -
-
-
- {% endif %} -
- -{% else %} - {% if file_type == 'image' %} -
-
- -
-
- {% else %} -
-
-
-
- - - - - -
-
- {{message_attachment.file_name}} -
-
-
-
- {% endif %} -{% endif %} \ No newline at end of file diff --git a/osinaweb/osichat/templates/partials/message.html b/osinaweb/osichat/templates/partials/message.html deleted file mode 100644 index 182c11a2..00000000 --- a/osinaweb/osichat/templates/partials/message.html +++ /dev/null @@ -1,80 +0,0 @@ -{% if chat_message.member %} -
-
-
- {% if chat_message.member.staffprofile.image %} - - {% else %} -

{{chat_message.member.first_name.0}}{{chat_message.member.last_name.0}}

- {% endif %} -
-
- {% if not chat_message.chatmessageattachment %} -
-

{{chat_message.content}}

-
- {% else %} - {% if chat_message.chatmessageattachment.is_image %} -
- -
- {% else %} -
-
-
- - - - - -
-
- {{chat_message.chatmessageattachment.file_name}} -
-
-
- {% endif %} - {% endif %} -
- - -{% else %} - {% if not chat_message.chatmessageattachment %} -
-
-

{{chat_message.content}}

-
-
- {% else %} - {% if chat_message.chatmessageattachment.is_image %} -
-
- -
-
- {% else %} -
-
-
-
- - - - - -
-
- {{chat_message.chatmessageattachment.file_name}} -
-
-
-
- {% endif %} - {% endif %} -{% endif %} diff --git a/osinaweb/osichat/templates/partials/submitted-review.html b/osinaweb/osichat/templates/partials/submitted-review.html deleted file mode 100644 index 6c0dc63d..00000000 --- a/osinaweb/osichat/templates/partials/submitted-review.html +++ /dev/null @@ -1,232 +0,0 @@ -
-
-
- - - - - - - - - - - - -
-
- -
-

Thank you for submitting the rating

- -
- - - - - - -
- {% if not review.details %} -
- {% csrf_token %} -
- - -
- -
-
-
- {% endif %} -
-
\ No newline at end of file diff --git a/osinaweb/osichat/templates/partials/typing.html b/osinaweb/osichat/templates/partials/typing.html deleted file mode 100644 index c1819f56..00000000 --- a/osinaweb/osichat/templates/partials/typing.html +++ /dev/null @@ -1,13 +0,0 @@ -
-
- -
-
-
-
-
-
-
-
diff --git a/osinaweb/osichat/templates/partials/unread-messages.html b/osinaweb/osichat/templates/partials/unread-messages.html deleted file mode 100644 index 64a859c2..00000000 --- a/osinaweb/osichat/templates/partials/unread-messages.html +++ /dev/null @@ -1,63 +0,0 @@ - -
-
-
-
-
- {% if latest_unread_message.member.staffprofile.image %} - - {% else %} -

{{latest_unread_message.member.first_name.0}}{{latest_unread_message.member.last_name.0}}

- {% endif %} -
-

{{latest_unread_message.member.first_name}} {{latest_unread_message.member.last_name.0}}. from Ositcom

-
- -
- - - -
-
- - - {% if not latest_unread_message.chatmessageattachment %} -

- {{latest_unread_message.content}} -

- - {% elif latest_unread_message.chatmessageattachment and not latest_unread_message.chatmessageattachment.is_image %} -
- - - - - -

{{latest_unread_message.chatmessageattachment.file_name}}

-
- {% else %} -
- -
- {% endif %} - - -
- - - - -

See {{number_of_unread}} new message{% if not number_of_unread == 1 %}s{% endif %}

-
-
-
\ No newline at end of file diff --git a/osinaweb/osichat/templates/start-chat.html b/osinaweb/osichat/templates/start-chat.html deleted file mode 100644 index b0e56ac6..00000000 --- a/osinaweb/osichat/templates/start-chat.html +++ /dev/null @@ -1,72 +0,0 @@ -{% load static %} - -
-
-
-
-

- We are here 24/7/365 to help with sales or support queries. To start your conversation enter your - name - and mobile number below. -

- - -
-
-
- - - -
- - -
- - -
-
- - - -
- -
- -
-
-
- - -
-
-

We are online

- -

Typically replies in a few minutes

- - -
- -
- - -

Osichat 2.0 by Ositcom

-
-
-
-
\ No newline at end of file diff --git a/osinaweb/osichat/tests.py b/osinaweb/osichat/tests.py deleted file mode 100644 index 7ce503c2..00000000 --- a/osinaweb/osichat/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/osinaweb/osichat/urls.py b/osinaweb/osichat/urls.py deleted file mode 100644 index 0ca688ea..00000000 --- a/osinaweb/osichat/urls.py +++ /dev/null @@ -1,9 +0,0 @@ -from django.urls import path, include -from . import views - - -urlpatterns = [ - path('api/', include('osichat.api.urls')), - path('get-client-ip/', views.get_client_ip, name='get-client-ip'), - path('chat-file-uploader/', views.upload_file, name='chat-file-uploader'), -] diff --git a/osinaweb/osichat/views.py b/osinaweb/osichat/views.py deleted file mode 100644 index c1fe0a81..00000000 --- a/osinaweb/osichat/views.py +++ /dev/null @@ -1,50 +0,0 @@ -from django.shortcuts import render, get_object_or_404 -from django.http import JsonResponse -import requests -import os -from django.views.decorators.csrf import csrf_exempt -from .models import * - - -# Create your views here. - -def get_client_ip(request): - client_ip = request.META.get('HTTP_X_FORWARDED_FOR', '').split(',')[0].strip() or request.META.get('REMOTE_ADDR', '') - - try: - response = requests.get(f'http://ipinfo.io/{client_ip}/json') - data = response.json() - country = data.get('country', 'Unknown') - region = data.get('region', 'Unknown') - except Exception as e: - country = "Unknown" - - return JsonResponse({'ip': client_ip, 'country': country, 'region': region}) - - -@csrf_exempt -def upload_file(request): - if 'file' not in request.FILES or 'filename' not in request.POST: - return JsonResponse({'data': 'Invalid Request'}) - - file = request.FILES['file'] - fileName = request.POST['filename'] - path = os.path.join('static', 'images', 'uploaded_chat_files', fileName) - - # Ensure the directory exists - os.makedirs(os.path.dirname(path), exist_ok=True) - - # If the file already exists, generate a new filename - index = 1 - base_filename, extension = os.path.splitext(fileName) - while os.path.exists(path): - new_filename = f"{base_filename}_{index}{extension}" - path = os.path.join('static', 'images', 'uploaded_chat_files', new_filename) - index += 1 - - # Write the entire file - with open(path, 'wb+') as destination: - destination.write(file.read()) - - - return JsonResponse({'data': 'Uploaded Successfully', 'existingPath': path}) \ No newline at end of file diff --git a/osinaweb/osinacore/__pycache__/__init__.cpython-313.pyc b/osinaweb/osinacore/__pycache__/__init__.cpython-313.pyc index a7794322..cbc7a059 100644 Binary files a/osinaweb/osinacore/__pycache__/__init__.cpython-313.pyc and b/osinaweb/osinacore/__pycache__/__init__.cpython-313.pyc differ diff --git a/osinaweb/osinacore/__pycache__/admin.cpython-313.pyc b/osinaweb/osinacore/__pycache__/admin.cpython-313.pyc index 49e48c0a..a03ad416 100644 Binary files a/osinaweb/osinacore/__pycache__/admin.cpython-313.pyc and b/osinaweb/osinacore/__pycache__/admin.cpython-313.pyc differ diff --git a/osinaweb/osinacore/__pycache__/apps.cpython-313.pyc b/osinaweb/osinacore/__pycache__/apps.cpython-313.pyc index badf3e5b..54095d0b 100644 Binary files a/osinaweb/osinacore/__pycache__/apps.cpython-313.pyc and b/osinaweb/osinacore/__pycache__/apps.cpython-313.pyc differ diff --git a/osinaweb/osinacore/__pycache__/consumers.cpython-313.pyc b/osinaweb/osinacore/__pycache__/consumers.cpython-313.pyc index 32d06c0c..881f8885 100644 Binary files a/osinaweb/osinacore/__pycache__/consumers.cpython-313.pyc and b/osinaweb/osinacore/__pycache__/consumers.cpython-313.pyc differ diff --git a/osinaweb/osinacore/__pycache__/decorators.cpython-313.pyc b/osinaweb/osinacore/__pycache__/decorators.cpython-313.pyc index 6d72e762..15068052 100644 Binary files a/osinaweb/osinacore/__pycache__/decorators.cpython-313.pyc and b/osinaweb/osinacore/__pycache__/decorators.cpython-313.pyc differ diff --git a/osinaweb/osinacore/__pycache__/forms.cpython-313.pyc b/osinaweb/osinacore/__pycache__/forms.cpython-313.pyc index 082af28c..9964a0f4 100644 Binary files a/osinaweb/osinacore/__pycache__/forms.cpython-313.pyc and b/osinaweb/osinacore/__pycache__/forms.cpython-313.pyc differ diff --git a/osinaweb/osinacore/__pycache__/models.cpython-313.pyc b/osinaweb/osinacore/__pycache__/models.cpython-313.pyc index 23847c2b..82d04c2b 100644 Binary files a/osinaweb/osinacore/__pycache__/models.cpython-313.pyc and b/osinaweb/osinacore/__pycache__/models.cpython-313.pyc differ diff --git a/osinaweb/osinacore/__pycache__/routing.cpython-313.pyc b/osinaweb/osinacore/__pycache__/routing.cpython-313.pyc index 93d60522..b8d46711 100644 Binary files a/osinaweb/osinacore/__pycache__/routing.cpython-313.pyc and b/osinaweb/osinacore/__pycache__/routing.cpython-313.pyc differ diff --git a/osinaweb/osinacore/__pycache__/urls.cpython-313.pyc b/osinaweb/osinacore/__pycache__/urls.cpython-313.pyc index e6c2a2fd..566235df 100644 Binary files a/osinaweb/osinacore/__pycache__/urls.cpython-313.pyc and b/osinaweb/osinacore/__pycache__/urls.cpython-313.pyc differ diff --git a/osinaweb/osinacore/__pycache__/views.cpython-313.pyc b/osinaweb/osinacore/__pycache__/views.cpython-313.pyc index e0380495..55eb7112 100644 Binary files a/osinaweb/osinacore/__pycache__/views.cpython-313.pyc and b/osinaweb/osinacore/__pycache__/views.cpython-313.pyc differ diff --git a/osinaweb/osinacore/add/__pycache__/urls.cpython-313.pyc b/osinaweb/osinacore/add/__pycache__/urls.cpython-313.pyc index 3f8e7402..698ea045 100644 Binary files a/osinaweb/osinacore/add/__pycache__/urls.cpython-313.pyc and b/osinaweb/osinacore/add/__pycache__/urls.cpython-313.pyc differ diff --git a/osinaweb/osinacore/add/__pycache__/views.cpython-313.pyc b/osinaweb/osinacore/add/__pycache__/views.cpython-313.pyc index 78eb6264..d27e2437 100644 Binary files a/osinaweb/osinacore/add/__pycache__/views.cpython-313.pyc and b/osinaweb/osinacore/add/__pycache__/views.cpython-313.pyc differ diff --git a/osinaweb/osinacore/api/__pycache__/serializers.cpython-313.pyc b/osinaweb/osinacore/api/__pycache__/serializers.cpython-313.pyc index ba1456a2..701fe287 100644 Binary files a/osinaweb/osinacore/api/__pycache__/serializers.cpython-313.pyc and b/osinaweb/osinacore/api/__pycache__/serializers.cpython-313.pyc differ diff --git a/osinaweb/osinacore/api/__pycache__/urls.cpython-313.pyc b/osinaweb/osinacore/api/__pycache__/urls.cpython-313.pyc index dea234bb..4344a9e7 100644 Binary files a/osinaweb/osinacore/api/__pycache__/urls.cpython-313.pyc and b/osinaweb/osinacore/api/__pycache__/urls.cpython-313.pyc differ diff --git a/osinaweb/osinacore/api/__pycache__/utils.cpython-313.pyc b/osinaweb/osinacore/api/__pycache__/utils.cpython-313.pyc index dbfd822e..1c4baaa4 100644 Binary files a/osinaweb/osinacore/api/__pycache__/utils.cpython-313.pyc and b/osinaweb/osinacore/api/__pycache__/utils.cpython-313.pyc differ diff --git a/osinaweb/osinacore/api/__pycache__/views.cpython-313.pyc b/osinaweb/osinacore/api/__pycache__/views.cpython-313.pyc index 22308f44..4f8101f9 100644 Binary files a/osinaweb/osinacore/api/__pycache__/views.cpython-313.pyc and b/osinaweb/osinacore/api/__pycache__/views.cpython-313.pyc differ diff --git a/osinaweb/osinacore/custom_context.py b/osinaweb/osinacore/custom_context.py index d9205367..14f88147 100644 --- a/osinaweb/osinacore/custom_context.py +++ b/osinaweb/osinacore/custom_context.py @@ -4,7 +4,7 @@ from datetime import datetime, timedelta from django.shortcuts import get_object_or_404 from django.db.models import Max, F from support.models import * -from osichat.models import * + def utilities(request): @@ -106,7 +106,6 @@ def utilities(request): last_login__isnull=False ).order_by('-last_login')[:8] - latest_chat_rooms = ChatRoom.objects.annotate(last_update=Max('chatmessage__date_sent')).order_by('-last_update', '-date_created') return { 'total_tasks': total_tasks, @@ -120,6 +119,5 @@ def utilities(request): 'open_tickets': open_tickets, 'closed_tickets': closed_tickets, 'today': today, - 'latest_chat_rooms': latest_chat_rooms, } \ No newline at end of file diff --git a/osinaweb/osinacore/delete/__pycache__/urls.cpython-313.pyc b/osinaweb/osinacore/delete/__pycache__/urls.cpython-313.pyc index 36df3b75..126ced46 100644 Binary files a/osinaweb/osinacore/delete/__pycache__/urls.cpython-313.pyc and b/osinaweb/osinacore/delete/__pycache__/urls.cpython-313.pyc differ diff --git a/osinaweb/osinacore/delete/__pycache__/views.cpython-313.pyc b/osinaweb/osinacore/delete/__pycache__/views.cpython-313.pyc index c7ed75ad..f733c548 100644 Binary files a/osinaweb/osinacore/delete/__pycache__/views.cpython-313.pyc and b/osinaweb/osinacore/delete/__pycache__/views.cpython-313.pyc differ diff --git a/osinaweb/osinacore/edit/__pycache__/urls.cpython-313.pyc b/osinaweb/osinacore/edit/__pycache__/urls.cpython-313.pyc index ca475cbf..37b568e3 100644 Binary files a/osinaweb/osinacore/edit/__pycache__/urls.cpython-313.pyc and b/osinaweb/osinacore/edit/__pycache__/urls.cpython-313.pyc differ diff --git a/osinaweb/osinacore/edit/__pycache__/views.cpython-313.pyc b/osinaweb/osinacore/edit/__pycache__/views.cpython-313.pyc index fde7b9a1..332697b4 100644 Binary files a/osinaweb/osinacore/edit/__pycache__/views.cpython-313.pyc and b/osinaweb/osinacore/edit/__pycache__/views.cpython-313.pyc differ diff --git a/osinaweb/osinacore/knowledge_base/__pycache__/urls.cpython-313.pyc b/osinaweb/osinacore/knowledge_base/__pycache__/urls.cpython-313.pyc index dc9b33bd..0167033c 100644 Binary files a/osinaweb/osinacore/knowledge_base/__pycache__/urls.cpython-313.pyc and b/osinaweb/osinacore/knowledge_base/__pycache__/urls.cpython-313.pyc differ diff --git a/osinaweb/osinacore/knowledge_base/__pycache__/views.cpython-313.pyc b/osinaweb/osinacore/knowledge_base/__pycache__/views.cpython-313.pyc index 4c85b1dd..51c1c255 100644 Binary files a/osinaweb/osinacore/knowledge_base/__pycache__/views.cpython-313.pyc and b/osinaweb/osinacore/knowledge_base/__pycache__/views.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0001_initial.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0001_initial.cpython-313.pyc index db393102..157757f7 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0001_initial.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0001_initial.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0002_projecttype_alter_business_options_staffprofile_and_more.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0002_projecttype_alter_business_options_staffprofile_and_more.cpython-313.pyc index bd5cc6c0..05455d26 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0002_projecttype_alter_business_options_staffprofile_and_more.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0002_projecttype_alter_business_options_staffprofile_and_more.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0003_milestone.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0003_milestone.cpython-313.pyc index 46470587..ad10db4d 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0003_milestone.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0003_milestone.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0004_epic.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0004_epic.cpython-313.pyc index 555139eb..8b0e13e6 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0004_epic.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0004_epic.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0005_staffprofile_image.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0005_staffprofile_image.cpython-313.pyc index a1c6e3f7..47e30e09 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0005_staffprofile_image.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0005_staffprofile_image.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0006_note.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0006_note.cpython-313.pyc index ccd04a56..9aabb2bd 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0006_note.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0006_note.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0007_project_project_id_alter_project_status.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0007_project_project_id_alter_project_status.cpython-313.pyc index 70732411..b899104d 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0007_project_project_id_alter_project_status.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0007_project_project_id_alter_project_status.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0008_alter_project_project_id.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0008_alter_project_project_id.cpython-313.pyc index b1c23990..94d03819 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0008_alter_project_project_id.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0008_alter_project_project_id.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0009_alter_project_project_id.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0009_alter_project_project_id.cpython-313.pyc index e6282556..b2fe53e3 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0009_alter_project_project_id.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0009_alter_project_project_id.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0010_remove_note_date.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0010_remove_note_date.cpython-313.pyc index 1ab821e8..b02bc209 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0010_remove_note_date.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0010_remove_note_date.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0011_note_date_alter_note_color_alter_note_text_and_more.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0011_note_date_alter_note_color_alter_note_text_and_more.cpython-313.pyc index dc44a601..de47a88f 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0011_note_date_alter_note_color_alter_note_text_and_more.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0011_note_date_alter_note_color_alter_note_text_and_more.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0012_projectrequirement.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0012_projectrequirement.cpython-313.pyc index b38ec7cd..33113828 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0012_projectrequirement.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0012_projectrequirement.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0013_projectfile.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0013_projectfile.cpython-313.pyc index 8c61b3cb..7362cdf0 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0013_projectfile.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0013_projectfile.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0014_alter_projectfile_file.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0014_alter_projectfile_file.cpython-313.pyc index 8e13e564..80c6d562 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0014_alter_projectfile_file.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0014_alter_projectfile_file.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0015_projectcredentials.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0015_projectcredentials.cpython-313.pyc index b8620cfc..1b032f65 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0015_projectcredentials.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0015_projectcredentials.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0016_rename_projectcredentials_projectcredential.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0016_rename_projectcredentials_projectcredential.cpython-313.pyc index 6e3a1546..9e432892 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0016_rename_projectcredentials_projectcredential.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0016_rename_projectcredentials_projectcredential.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0017_alter_project_end_date_alter_project_start_date.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0017_alter_project_end_date_alter_project_start_date.cpython-313.pyc index 62402b77..e06555ec 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0017_alter_project_end_date_alter_project_start_date.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0017_alter_project_end_date_alter_project_start_date.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0018_epic_status.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0018_epic_status.cpython-313.pyc index 65bcb8c0..33dbe9ed 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0018_epic_status.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0018_epic_status.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0019_alter_epic_end_date_alter_epic_start_date.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0019_alter_epic_end_date_alter_epic_start_date.cpython-313.pyc index a4d4069a..7b1232cd 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0019_alter_epic_end_date_alter_epic_start_date.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0019_alter_epic_end_date_alter_epic_start_date.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0020_task.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0020_task.cpython-313.pyc index 860ce6d1..4337ba11 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0020_task.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0020_task.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0021_alter_customerprofile_business_and_more.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0021_alter_customerprofile_business_and_more.cpython-313.pyc index e25c0845..a8f7163b 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0021_alter_customerprofile_business_and_more.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0021_alter_customerprofile_business_and_more.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0022_customerprofile_customer_id.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0022_customerprofile_customer_id.cpython-313.pyc index a824b794..bdc5178b 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0022_customerprofile_customer_id.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0022_customerprofile_customer_id.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0023_task_assigned_to.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0023_task_assigned_to.cpython-313.pyc index 8203a1e3..29d42334 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0023_task_assigned_to.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0023_task_assigned_to.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0024_task_task_id.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0024_task_task_id.cpython-313.pyc index 6066de17..78d3fccb 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0024_task_task_id.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0024_task_task_id.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0025_status.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0025_status.cpython-313.pyc index 1b8c0ade..4c2a5954 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0025_status.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0025_status.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0026_remove_status_user_status_staff.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0026_remove_status_user_status_staff.cpython-313.pyc index df71de89..bab13bd1 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0026_remove_status_user_status_staff.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0026_remove_status_user_status_staff.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0027_alter_status_staff.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0027_alter_status_staff.cpython-313.pyc index 8667b9aa..29e6391c 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0027_alter_status_staff.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0027_alter_status_staff.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0028_remove_projecttype_color.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0028_remove_projecttype_color.cpython-313.pyc index 3d614e63..b74ed13b 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0028_remove_projecttype_color.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0028_remove_projecttype_color.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0029_alter_reference_date.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0029_alter_reference_date.cpython-313.pyc index 068e6596..a03f6010 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0029_alter_reference_date.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0029_alter_reference_date.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0030_tag.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0030_tag.cpython-313.pyc index 7f6cfde1..d47e810c 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0030_tag.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0030_tag.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0031_alter_staffprofile_image.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0031_alter_staffprofile_image.cpython-313.pyc index f241bc56..932e52d5 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0031_alter_staffprofile_image.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0031_alter_staffprofile_image.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0032_point.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0032_point.cpython-313.pyc index 7d3d9253..d0a4b597 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0032_point.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0032_point.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0033_point_date_completed_point_date_workingon_and_more.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0033_point_date_completed_point_date_workingon_and_more.cpython-313.pyc index 3aa64228..d547eddb 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0033_point_date_completed_point_date_workingon_and_more.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0033_point_date_completed_point_date_workingon_and_more.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0034_alter_point_date_completed_and_more.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0034_alter_point_date_completed_and_more.cpython-313.pyc index 20a93e05..dc15ba82 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0034_alter_point_date_completed_and_more.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0034_alter_point_date_completed_and_more.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0035_business_business_id.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0035_business_business_id.cpython-313.pyc index 69a4fffd..5fc0c8a3 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0035_business_business_id.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0035_business_business_id.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0036_staffposition_alter_staffprofile_position.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0036_staffposition_alter_staffprofile_position.cpython-313.pyc index 39b160b4..4a9d59bd 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0036_staffposition_alter_staffprofile_position.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0036_staffposition_alter_staffprofile_position.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0037_remove_staffprofile_position.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0037_remove_staffprofile_position.cpython-313.pyc index 66a2ae91..74c502d7 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0037_remove_staffprofile_position.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0037_remove_staffprofile_position.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0038_staffprofile_staff_position.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0038_staffprofile_staff_position.cpython-313.pyc index 9e29d065..ae07fcdc 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0038_staffprofile_staff_position.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0038_staffprofile_staff_position.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0039_alter_staffprofile_staff_position.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0039_alter_staffprofile_staff_position.cpython-313.pyc index 04d480c0..fd9e6e2d 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0039_alter_staffprofile_staff_position.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0039_alter_staffprofile_staff_position.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0040_staffprofile_staff_id.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0040_staffprofile_staff_id.cpython-313.pyc index 936c1693..4e9b8395 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0040_staffprofile_staff_id.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0040_staffprofile_staff_id.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0041_dailyreport.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0041_dailyreport.cpython-313.pyc index b67c8f9e..e06eb2f9 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0041_dailyreport.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0041_dailyreport.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0042_remove_customerprofile_email_and_more.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0042_remove_customerprofile_email_and_more.cpython-313.pyc index 124f493a..a6aa9b3d 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0042_remove_customerprofile_email_and_more.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0042_remove_customerprofile_email_and_more.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0043_businesstype.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0043_businesstype.cpython-313.pyc index 5d52ba56..3a236ae9 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0043_businesstype.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0043_businesstype.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0044_remove_business_business_type.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0044_remove_business_business_type.cpython-313.pyc index bd667038..852ae7c4 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0044_remove_business_business_type.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0044_remove_business_business_type.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0045_business_type.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0045_business_type.cpython-313.pyc index 9895a85e..2b867bb3 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0045_business_type.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0045_business_type.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0046_task_requirement.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0046_task_requirement.cpython-313.pyc index e19dc3b8..eb667bc8 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0046_task_requirement.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0046_task_requirement.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0047_task_status_date.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0047_task_status_date.cpython-313.pyc index abde41e0..84c0742f 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0047_task_status_date.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0047_task_status_date.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0048_alter_customerprofile_business.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0048_alter_customerprofile_business.cpython-313.pyc index e419114f..20296735 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0048_alter_customerprofile_business.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0048_alter_customerprofile_business.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0049_alter_customerprofile_business.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0049_alter_customerprofile_business.cpython-313.pyc index 8262448c..5ca63a5c 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0049_alter_customerprofile_business.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0049_alter_customerprofile_business.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0050_projectrequirement_added_by_projectrequirement_date.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0050_projectrequirement_added_by_projectrequirement_date.cpython-313.pyc index 91ae927e..376fda5b 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0050_projectrequirement_added_by_projectrequirement_date.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0050_projectrequirement_added_by_projectrequirement_date.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0051_alter_task_requirement.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0051_alter_task_requirement.cpython-313.pyc index ca64fe36..55a507f7 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0051_alter_task_requirement.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0051_alter_task_requirement.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0052_note_project.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0052_note_project.cpython-313.pyc index 905c08f9..2e4cd9f3 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0052_note_project.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0052_note_project.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0053_pointactivity.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0053_pointactivity.cpython-313.pyc index ea87968b..746af18d 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0053_pointactivity.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0053_pointactivity.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0054_remove_point_date_completed_and_more.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0054_remove_point_date_completed_and_more.cpython-313.pyc index 5dd3dc8b..6b8f17d3 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0054_remove_point_date_completed_and_more.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0054_remove_point_date_completed_and_more.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0055_alter_point_status.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0055_alter_point_status.cpython-313.pyc index 609460ba..8b180ffe 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0055_alter_point_status.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0055_alter_point_status.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0056_alter_pointactivity_end_time.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0056_alter_pointactivity_end_time.cpython-313.pyc index c70f6bfd..f3739c96 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0056_alter_pointactivity_end_time.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0056_alter_pointactivity_end_time.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0057_point_total_time_hours_point_total_time_minutes_and_more.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0057_point_total_time_hours_point_total_time_minutes_and_more.cpython-313.pyc index 5d4025ad..9ea4bbc2 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0057_point_total_time_hours_point_total_time_minutes_and_more.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0057_point_total_time_hours_point_total_time_minutes_and_more.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0058_remove_point_total_time_hours_and_more.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0058_remove_point_total_time_hours_and_more.cpython-313.pyc index 574e9424..d5032651 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0058_remove_point_total_time_hours_and_more.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0058_remove_point_total_time_hours_and_more.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0059_alter_task_requirement.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0059_alter_task_requirement.cpython-313.pyc index 113e97b2..d105bfe6 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0059_alter_task_requirement.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0059_alter_task_requirement.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0060_pointactivity_total_time.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0060_pointactivity_total_time.cpython-313.pyc index 9a77533c..d05ed7ac 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0060_pointactivity_total_time.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0060_pointactivity_total_time.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0061_alter_task_end_date_alter_task_start_date.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0061_alter_task_end_date_alter_task_start_date.cpython-313.pyc index 88efa001..3f7b9077 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0061_alter_task_end_date_alter_task_start_date.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0061_alter_task_end_date_alter_task_start_date.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0062_connection.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0062_connection.cpython-313.pyc index b1224149..7fdaf875 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0062_connection.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0062_connection.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0063_alter_connection_date.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0063_alter_connection_date.cpython-313.pyc index 89d0db53..44568a9e 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0063_alter_connection_date.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0063_alter_connection_date.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0064_reaction.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0064_reaction.cpython-313.pyc index 23a92e53..2de8b336 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0064_reaction.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0064_reaction.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0065_alter_customerprofile_status.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0065_alter_customerprofile_status.cpython-313.pyc index 5ec0384b..9915809a 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0065_alter_customerprofile_status.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0065_alter_customerprofile_status.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0066_remove_customerprofile_business_business_customer.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0066_remove_customerprofile_business_business_customer.cpython-313.pyc index 49de30d0..fea7a82b 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0066_remove_customerprofile_business_business_customer.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0066_remove_customerprofile_business_business_customer.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0067_customerprofile_confirmed.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0067_customerprofile_confirmed.cpython-313.pyc index 5b280931..8acfbd76 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0067_customerprofile_confirmed.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0067_customerprofile_confirmed.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0068_remove_customerprofile_confirmed_and_more.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0068_remove_customerprofile_confirmed_and_more.cpython-313.pyc index e3856bc1..b3645078 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0068_remove_customerprofile_confirmed_and_more.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0068_remove_customerprofile_confirmed_and_more.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0069_alter_business_logo_alter_projectfile_file_and_more.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0069_alter_business_logo_alter_projectfile_file_and_more.cpython-313.pyc index b30be3f3..44293710 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0069_alter_business_logo_alter_projectfile_file_and_more.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0069_alter_business_logo_alter_projectfile_file_and_more.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0070_department_alter_staffprofile_staff_position_and_more.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0070_department_alter_staffprofile_staff_position_and_more.cpython-313.pyc index c5e32f52..2aec97f9 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0070_department_alter_staffprofile_staff_position_and_more.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0070_department_alter_staffprofile_staff_position_and_more.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0071_projecttype_department_ticket.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0071_projecttype_department_ticket.cpython-313.pyc index 205c4fa2..1c1a84c6 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0071_projecttype_department_ticket.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0071_projecttype_department_ticket.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0072_ticketupdate_ticketreaction_ticketattachment.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0072_ticketupdate_ticketreaction_ticketattachment.cpython-313.pyc index 6698c15e..7978e154 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0072_ticketupdate_ticketreaction_ticketattachment.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0072_ticketupdate_ticketreaction_ticketattachment.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0073_alter_ticket_regarding.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0073_alter_ticket_regarding.cpython-313.pyc index 23de6443..d202813c 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0073_alter_ticket_regarding.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0073_alter_ticket_regarding.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0074_rename_dare_added_ticketupdate_date_added.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0074_rename_dare_added_ticketupdate_date_added.cpython-313.pyc index d5c1f1ad..98cfffbb 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0074_rename_dare_added_ticketupdate_date_added.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0074_rename_dare_added_ticketupdate_date_added.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0075_remove_ticketattachment_ticket_and_more.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0075_remove_ticketattachment_ticket_and_more.cpython-313.pyc index 998aa5fc..8975a882 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0075_remove_ticketattachment_ticket_and_more.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0075_remove_ticketattachment_ticket_and_more.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0076_alter_reference_date.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0076_alter_reference_date.cpython-313.pyc index 678e0b65..25a299a2 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0076_alter_reference_date.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0076_alter_reference_date.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0077_remove_project_status_project_active_projectstatus.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0077_remove_project_status_project_active_projectstatus.cpython-313.pyc index 5b798be7..67ec20de 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0077_remove_project_status_project_active_projectstatus.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0077_remove_project_status_project_active_projectstatus.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0078_alter_projectstatus_status.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0078_alter_projectstatus_status.cpython-313.pyc index b667bd46..9f871535 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0078_alter_projectstatus_status.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0078_alter_projectstatus_status.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0079_alter_project_end_date_alter_project_start_date.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0079_alter_project_end_date_alter_project_start_date.cpython-313.pyc index 4474b5b9..c0d38333 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0079_alter_project_end_date_alter_project_start_date.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0079_alter_project_end_date_alter_project_start_date.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0080_project_logo.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0080_project_logo.cpython-313.pyc index 277b0f5c..fe299269 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0080_project_logo.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0080_project_logo.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0081_status_task.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0081_status_task.cpython-313.pyc index 259cf7e4..596af27d 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0081_status_task.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0081_status_task.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0082_pinnedproject.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0082_pinnedproject.cpython-313.pyc index 3ee48472..16648422 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0082_pinnedproject.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0082_pinnedproject.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0083_rename_staffposition_jobposition_and_more.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0083_rename_staffposition_jobposition_and_more.cpython-313.pyc index c77cac04..0fb8e6e4 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0083_rename_staffposition_jobposition_and_more.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0083_rename_staffposition_jobposition_and_more.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0084_staffposition.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0084_staffposition.cpython-313.pyc index 951c7e79..a94f8521 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0084_staffposition.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0084_staffposition.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0085_rename_date_staffposition_start_date_and_more.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0085_rename_date_staffposition_start_date_and_more.cpython-313.pyc index 4329657a..1c055763 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0085_rename_date_staffposition_start_date_and_more.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0085_rename_date_staffposition_start_date_and_more.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0086_remove_connection_status_connection_terminated_at.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0086_remove_connection_status_connection_terminated_at.cpython-313.pyc index 548fa954..e173730c 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0086_remove_connection_status_connection_terminated_at.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0086_remove_connection_status_connection_terminated_at.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0087_remove_connection_date.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0087_remove_connection_date.cpython-313.pyc index 91589c64..77858a3e 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0087_remove_connection_date.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0087_remove_connection_date.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0088_connection_date.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0088_connection_date.cpython-313.pyc index 6468210f..585c1039 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0088_connection_date.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0088_connection_date.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0089_connection_connected.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0089_connection_connected.cpython-313.pyc index bb97e647..262abea5 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0089_connection_connected.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0089_connection_connected.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0090_rename_terminated_at_connection_last_seen.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0090_rename_terminated_at_connection_last_seen.cpython-313.pyc index 6dea5e0f..ff09573e 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0090_rename_terminated_at_connection_last_seen.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0090_rename_terminated_at_connection_last_seen.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0091_alter_connection_user.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0091_alter_connection_user.cpython-313.pyc index 2096dd29..86f7bf2f 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0091_alter_connection_user.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0091_alter_connection_user.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0092_rename_connected_connection_online.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0092_rename_connected_connection_online.cpython-313.pyc index f4e0c33c..38f1a963 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0092_rename_connected_connection_online.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0092_rename_connected_connection_online.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0093_connection_disconnected.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0093_connection_disconnected.cpython-313.pyc index 3232c268..4e376f05 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0093_connection_disconnected.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0093_connection_disconnected.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0094_customuser.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0094_customuser.cpython-313.pyc index a58e2d87..fa68f87b 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0094_customuser.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0094_customuser.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0095_delete_customuser.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0095_delete_customuser.cpython-313.pyc index 064a27c2..53e8e249 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0095_delete_customuser.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0095_delete_customuser.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0096_status_date_time.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0096_status_date_time.cpython-313.pyc index 23bb8cea..aaeb1d11 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0096_status_date_time.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0096_status_date_time.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0097_remove_status_date_remove_status_time.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0097_remove_status_date_remove_status_time.cpython-313.pyc index be9011bb..e4498805 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0097_remove_status_date_remove_status_time.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0097_remove_status_date_remove_status_time.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0098_rename_emailorusername_projectcredential_identifier.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0098_rename_emailorusername_projectcredential_identifier.cpython-313.pyc index 008fea50..9e7919c8 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0098_rename_emailorusername_projectcredential_identifier.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0098_rename_emailorusername_projectcredential_identifier.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0099_remove_projectcredential_usedfor_and_more.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0099_remove_projectcredential_usedfor_and_more.cpython-313.pyc index 5908cddb..47d252b8 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0099_remove_projectcredential_usedfor_and_more.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0099_remove_projectcredential_usedfor_and_more.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0100_projectcredential_date_added.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0100_projectcredential_date_added.cpython-313.pyc index 88b7c86c..70dc5b04 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0100_projectcredential_date_added.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0100_projectcredential_date_added.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0101_rename_date_projectfile_date_added.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0101_rename_date_projectfile_date_added.cpython-313.pyc index e97f544b..0b2889d3 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0101_rename_date_projectfile_date_added.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0101_rename_date_projectfile_date_added.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0102_remove_projectfile_date_added_and_more.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0102_remove_projectfile_date_added_and_more.cpython-313.pyc index 91791ded..9c753e82 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0102_remove_projectfile_date_added_and_more.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0102_remove_projectfile_date_added_and_more.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0103_alter_projectfilealbum_date_added.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0103_alter_projectfilealbum_date_added.cpython-313.pyc index 83e9c11f..926efa88 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0103_alter_projectfilealbum_date_added.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0103_alter_projectfilealbum_date_added.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0104_projectfilealbum_file.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0104_projectfilealbum_file.cpython-313.pyc index 587dad39..b206e924 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0104_projectfilealbum_file.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0104_projectfilealbum_file.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0105_remove_projectfile_name_remove_projectfile_project_and_more.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0105_remove_projectfile_name_remove_projectfile_project_and_more.cpython-313.pyc index 553c5f7e..57ee1c73 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0105_remove_projectfile_name_remove_projectfile_project_and_more.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0105_remove_projectfile_name_remove_projectfile_project_and_more.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0106_alter_projectfile_file.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0106_alter_projectfile_file.cpython-313.pyc index 58a39532..f81550e2 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0106_alter_projectfile_file.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0106_alter_projectfile_file.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0107_remove_staffprofile_active.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0107_remove_staffprofile_active.cpython-313.pyc index f4cda0ff..4ef49fec 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0107_remove_staffprofile_active.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0107_remove_staffprofile_active.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0108_status_type_status_type_id.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0108_status_type_status_type_id.cpython-313.pyc index 4aede223..fb0f972e 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0108_status_type_status_type_id.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0108_status_type_status_type_id.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0109_remove_status_task.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0109_remove_status_task.cpython-313.pyc index 246d447b..d5c46fd5 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0109_remove_status_task.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0109_remove_status_task.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0110_projectrequirement_milestone.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0110_projectrequirement_milestone.cpython-313.pyc index 6fefc2ca..5053f644 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0110_projectrequirement_milestone.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0110_projectrequirement_milestone.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0111_rename_projectrequirement_userstory_and_more.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0111_rename_projectrequirement_userstory_and_more.cpython-313.pyc index d71ea269..07f0989e 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0111_rename_projectrequirement_userstory_and_more.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0111_rename_projectrequirement_userstory_and_more.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0112_rename_title_milestone_name.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0112_rename_title_milestone_name.cpython-313.pyc index 0cd712ff..522cbd62 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0112_rename_title_milestone_name.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0112_rename_title_milestone_name.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0113_userstory_completed_userstory_confirmed.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0113_userstory_completed_userstory_confirmed.cpython-313.pyc index b16eb159..a88b276a 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0113_userstory_completed_userstory_confirmed.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0113_userstory_completed_userstory_confirmed.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0114_alter_project_end_date.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0114_alter_project_end_date.cpython-313.pyc index 05770d93..6ac42c27 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0114_alter_project_end_date.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0114_alter_project_end_date.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0115_projectstatus_default_created.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0115_projectstatus_default_created.cpython-313.pyc index 36d0b699..e251be86 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0115_projectstatus_default_created.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0115_projectstatus_default_created.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0116_remove_projectstatus_default_created.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0116_remove_projectstatus_default_created.cpython-313.pyc index fbb33ad6..e71372c6 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0116_remove_projectstatus_default_created.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0116_remove_projectstatus_default_created.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0117_task_milestone.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0117_task_milestone.cpython-313.pyc index f44386ed..08f08685 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0117_task_milestone.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0117_task_milestone.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0118_business_created_at_business_uuid_and_more.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0118_business_created_at_business_uuid_and_more.cpython-313.pyc index f76c5a3f..a6633067 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0118_business_created_at_business_uuid_and_more.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0118_business_created_at_business_uuid_and_more.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/0119_remove_business_created_at_remove_business_uuid_and_more.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/0119_remove_business_created_at_remove_business_uuid_and_more.cpython-313.pyc index 36ebf8c8..6f9efbd8 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/0119_remove_business_created_at_remove_business_uuid_and_more.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/0119_remove_business_created_at_remove_business_uuid_and_more.cpython-313.pyc differ diff --git a/osinaweb/osinacore/migrations/__pycache__/__init__.cpython-313.pyc b/osinaweb/osinacore/migrations/__pycache__/__init__.cpython-313.pyc index 147242d0..5c9f3db9 100644 Binary files a/osinaweb/osinacore/migrations/__pycache__/__init__.cpython-313.pyc and b/osinaweb/osinacore/migrations/__pycache__/__init__.cpython-313.pyc differ diff --git a/osinaweb/osinacore/templates/chat_templates/chat-room.html b/osinaweb/osinacore/templates/chat_templates/chat-room.html deleted file mode 100644 index 6ee49f84..00000000 --- a/osinaweb/osinacore/templates/chat_templates/chat-room.html +++ /dev/null @@ -1,135 +0,0 @@ -{% load static %} - - - - -
- -
-
- -
- -

{{chat_room.chatroomguest.visitor.name}}

-
- -
- -
- {% for message in chat_room_messages %} - {% if message.member %} - {% if not message.chatmessageattachment %} -
-
-

{{message.content}}

-
-
- {% else %} - {% if message.chatmessageattachment.is_image %} -
-
- -
-
- {% else %} -
-
-
-
- - - - - -
-
- {{message.chatmessageattachment.file_name}} -
-
-
-
- {% endif %} - {% endif %} - {% else %} -
-
-
- -
-
- {% if not message.chatmessageattachment %} -
-

{{message.content}}

-
- {% else %} - {% if message.chatmessageattachment.is_image %} -
- -
- {% else %} -
-
-
- - - - - -
-
- {{message.chatmessageattachment.file_name}} -
-
-
- {% endif %} - {% endif %} -
- {% endif %} - {% endfor %} - - -
- - -
- {% csrf_token %} -
- -
-
- - - - - -
- -
-
-
-
-
\ No newline at end of file diff --git a/osinaweb/osinacore/templates/chat_templates/chat-widget.html b/osinaweb/osinacore/templates/chat_templates/chat-widget.html deleted file mode 100644 index ea969c75..00000000 --- a/osinaweb/osinacore/templates/chat_templates/chat-widget.html +++ /dev/null @@ -1,87 +0,0 @@ -{% load static %} - - - -
- - - - - -

Osichat

-
- - - - - \ No newline at end of file diff --git a/osinaweb/osinacore/templates/chat_templates/partials/message.html b/osinaweb/osinacore/templates/chat_templates/partials/message.html deleted file mode 100644 index c2eb22da..00000000 --- a/osinaweb/osinacore/templates/chat_templates/partials/message.html +++ /dev/null @@ -1,73 +0,0 @@ -{% if chat_message.member %} - {% if not chat_message.chatmessageattachment %} -
-
-

{{chat_message.content}}

-
-
- {% else %} - {% if chat_message.chatmessageattachment.is_image %} -
-
- -
-
- {% else %} -
-
-
-
- - - - - -
-
- {{chat_message.chatmessageattachment.file_name}} -
-
-
-
- {% endif %} - {% endif %} -{% else %} -
-
-
- -
-
- {% if not chat_message.chatmessageattachment %} -
-

{{chat_message.content}}

-
- {% else %} - {% if chat_message.chatmessageattachment.is_image %} -
- -
- {% else %} -
-
-
- - - - - -
-
- {{chat_message.chatmessageattachment.file_name}} -
-
-
- {% endif %} - {% endif %} -
-{% endif %} \ No newline at end of file diff --git a/osinaweb/osinacore/templates/chat_templates/partials/new-chat-room.html b/osinaweb/osinacore/templates/chat_templates/partials/new-chat-room.html deleted file mode 100644 index d74b8e1f..00000000 --- a/osinaweb/osinacore/templates/chat_templates/partials/new-chat-room.html +++ /dev/null @@ -1,21 +0,0 @@ -
-
-
-
- -
-
-

{{chat_room.chatroomguest.visitor.ip_address}}

-

{{chat_room.chatmessage_set.all.last.content}}

- -

{{chat_room.last_updated}}

-
-
- - -
-
\ No newline at end of file diff --git a/osinaweb/osinacore/templates/chat_templates/partials/new-visitor.html b/osinaweb/osinacore/templates/chat_templates/partials/new-visitor.html deleted file mode 100644 index d295a5b2..00000000 --- a/osinaweb/osinacore/templates/chat_templates/partials/new-visitor.html +++ /dev/null @@ -1,30 +0,0 @@ -{% load static %} -
-
-
- {% if not visitor.country == 'Unknown' %} - - {% else %} - - {% endif %} - - {% if visitor.is_online %} -
- {% endif %} -
- -
-

{{visitor.ip_address}}

-

- {% if not visitor.visitorlog_set.all.last.title %} - {{ visitor.visitorlog_set.all.last.url|slice:":26" }}{% if visitor.visitorlog_set.all.last.url|length > 26 %}…{% endif %} - {% else %} - {{ visitor.visitorlog_set.all.last.title|slice:":26" }}{% if visitor.visitorlog_set.all.last.title|length > 26 %}…{% endif %} - {% endif %} -

-
- -
- -

{{visitor.total_duration}}

-
\ No newline at end of file diff --git a/osinaweb/osinacore/templates/chat_templates/partials/rooms.html b/osinaweb/osinacore/templates/chat_templates/partials/rooms.html deleted file mode 100644 index 7a621c7c..00000000 --- a/osinaweb/osinacore/templates/chat_templates/partials/rooms.html +++ /dev/null @@ -1,31 +0,0 @@ - -
- {% for chat_room in chat_rooms %} -
-
-
-
- -
-
-

{{chat_room.chatroomguest.visitor.ip_address}}

-

{{chat_room.chatmessage_set.all.last.content}}

- -

{{chat_room.last_updated}}

-
-
- - -
-
- {% endfor %} -
- - - - - \ No newline at end of file diff --git a/osinaweb/osinacore/templates/chat_templates/partials/typing.html b/osinaweb/osinacore/templates/chat_templates/partials/typing.html deleted file mode 100644 index 9c243255..00000000 --- a/osinaweb/osinacore/templates/chat_templates/partials/typing.html +++ /dev/null @@ -1,13 +0,0 @@ -
-
- -
-
-
-
-
-
-
-
diff --git a/osinaweb/osinacore/templates/chat_templates/partials/visitors.html b/osinaweb/osinacore/templates/chat_templates/partials/visitors.html deleted file mode 100644 index 4e82a7be..00000000 --- a/osinaweb/osinacore/templates/chat_templates/partials/visitors.html +++ /dev/null @@ -1,47 +0,0 @@ -{% load static %} - -
-
-
-
-
- -

Visitors today

-
- -
- {% for visitor in visitors %} -
-
-
- {% if not visitor.country == 'Unknown' %} - - {% else %} - - {% endif %} - - {% if visitor.is_online %} -
- {% endif %} -
- -
-

{{visitor.ip_address}}

-

- {% if not visitor.visitorlog_set.all.last.title %} - {{ visitor.visitorlog_set.all.last.url|slice:":26" }}{% if visitor.visitorlog_set.all.last.url|length > 26 %}…{% endif %} - {% else %} - {{ visitor.visitorlog_set.all.last.title|slice:":26" }}{% if visitor.visitorlog_set.all.last.title|length > 26 %}…{% endif %} - {% endif %} -

-
- -
- -

{{visitor.total_duration}}

-
- {% endfor %} -
-
- - \ No newline at end of file diff --git a/osinaweb/osinacore/templates/dashboard-main.html b/osinaweb/osinacore/templates/dashboard-main.html index a09fc998..abdcba88 100644 --- a/osinaweb/osinacore/templates/dashboard-main.html +++ b/osinaweb/osinacore/templates/dashboard-main.html @@ -21,9 +21,6 @@ -
- {% include 'chat_templates/chat-widget.html' %} -
@@ -1238,9 +1235,6 @@ - - - diff --git a/osinaweb/osinacore/templates/main.html b/osinaweb/osinacore/templates/main.html index 1a22f926..c9b0df9a 100644 --- a/osinaweb/osinacore/templates/main.html +++ b/osinaweb/osinacore/templates/main.html @@ -21,9 +21,6 @@ -
- {% include 'chat_templates/chat-widget.html' %} -
@@ -1265,8 +1262,6 @@ - - diff --git a/osinaweb/osinacore/views.py b/osinaweb/osinacore/views.py index 0ba9c94d..e1dacf41 100644 --- a/osinaweb/osinacore/views.py +++ b/osinaweb/osinacore/views.py @@ -23,7 +23,7 @@ from django.utils.http import urlsafe_base64_encode, urlsafe_base64_decode from support .models import * from django.db.models import Max from django.core.paginator import Paginator -from osichat.models import * + def update_task_statuses(request): diff --git a/osinaweb/osinaweb/__pycache__/__init__.cpython-313.pyc b/osinaweb/osinaweb/__pycache__/__init__.cpython-313.pyc index 75e7fbca..1e60b9fc 100644 Binary files a/osinaweb/osinaweb/__pycache__/__init__.cpython-313.pyc and b/osinaweb/osinaweb/__pycache__/__init__.cpython-313.pyc differ diff --git a/osinaweb/osinaweb/__pycache__/asgi.cpython-313.pyc b/osinaweb/osinaweb/__pycache__/asgi.cpython-313.pyc index 37a5a8eb..3ab2c94d 100644 Binary files a/osinaweb/osinaweb/__pycache__/asgi.cpython-313.pyc and b/osinaweb/osinaweb/__pycache__/asgi.cpython-313.pyc differ diff --git a/osinaweb/osinaweb/__pycache__/routing.cpython-313.pyc b/osinaweb/osinaweb/__pycache__/routing.cpython-313.pyc index 0d4c2376..bfd46007 100644 Binary files a/osinaweb/osinaweb/__pycache__/routing.cpython-313.pyc and b/osinaweb/osinaweb/__pycache__/routing.cpython-313.pyc differ diff --git a/osinaweb/osinaweb/__pycache__/settings.cpython-313.pyc b/osinaweb/osinaweb/__pycache__/settings.cpython-313.pyc index ae9e5b6f..ac283b15 100644 Binary files a/osinaweb/osinaweb/__pycache__/settings.cpython-313.pyc and b/osinaweb/osinaweb/__pycache__/settings.cpython-313.pyc differ diff --git a/osinaweb/osinaweb/__pycache__/urls.cpython-313.pyc b/osinaweb/osinaweb/__pycache__/urls.cpython-313.pyc index 352eff44..52b2588b 100644 Binary files a/osinaweb/osinaweb/__pycache__/urls.cpython-313.pyc and b/osinaweb/osinaweb/__pycache__/urls.cpython-313.pyc differ diff --git a/osinaweb/osinaweb/routing.py b/osinaweb/osinaweb/routing.py index 47735a58..98055dfd 100644 --- a/osinaweb/osinaweb/routing.py +++ b/osinaweb/osinaweb/routing.py @@ -1,5 +1,4 @@ from support.routing import websocket_urlpatterns as support_websocket_urlpatterns from osinacore.routing import websocket_urlpatterns as osinacore_websocket_urlpatterns -from osichat.routing import websocket_urlpatterns as osichat_websocket_urlpatterns -websocket_urlpatterns = support_websocket_urlpatterns + osinacore_websocket_urlpatterns + osichat_websocket_urlpatterns \ No newline at end of file +websocket_urlpatterns = support_websocket_urlpatterns + osinacore_websocket_urlpatterns \ No newline at end of file diff --git a/osinaweb/osinaweb/settings.py b/osinaweb/osinaweb/settings.py index be45d255..b77d150e 100644 --- a/osinaweb/osinaweb/settings.py +++ b/osinaweb/osinaweb/settings.py @@ -52,7 +52,6 @@ LOGIN_URL = 'signin' # Application definition INSTALLED_APPS = [ - 'osichat', 'daphne', 'support', 'rest_framework', diff --git a/osinaweb/osinaweb/urls.py b/osinaweb/osinaweb/urls.py index 2d3d9f72..7c7019df 100644 --- a/osinaweb/osinaweb/urls.py +++ b/osinaweb/osinaweb/urls.py @@ -24,7 +24,6 @@ urlpatterns = [ path('', include('customercore.urls')), path('', include('billing.urls')), path('', include('support.urls')), - path('', include('osichat.urls')), path('admin/', admin.site.urls), ] diff --git a/osinaweb/static/js/.DS_Store b/osinaweb/static/js/.DS_Store index 148c37fd..d7ee40fe 100644 Binary files a/osinaweb/static/js/.DS_Store and b/osinaweb/static/js/.DS_Store differ diff --git a/osinaweb/static/js/osichat-admin/chat-toggle.js b/osinaweb/static/js/osichat-admin/chat-toggle.js deleted file mode 100644 index ce07f46c..00000000 --- a/osinaweb/static/js/osichat-admin/chat-toggle.js +++ /dev/null @@ -1,27 +0,0 @@ -const openChatButton = document.getElementById('openChatContainer'); -const osichatWidget = document.getElementById('osichatWidget'); -const closeChatButton = document.getElementById('closeChatContainer'); -const conversation = document.getElementById('conversation'); - -function scrollToBottom() { - conversation.scrollTop = conversation.scrollHeight; -} - -openChatButton.addEventListener('click', function () { - osichatWidget.classList.remove('hidden'); - openChatButton.classList.add('hidden'); - closeChatButton.classList.remove('hidden'); - scrollToBottom(); -}); - -function closeChat() { - osichatWidget.classList.add('hidden'); - openChatButton.classList.remove('hidden'); - closeChatButton.classList.add('hidden'); -} - - -closeChatButton.addEventListener('click', closeChat); - - - diff --git a/osinaweb/static/js/osichat-admin/inner-conversation.js b/osinaweb/static/js/osichat-admin/inner-conversation.js deleted file mode 100644 index ce914e00..00000000 --- a/osinaweb/static/js/osichat-admin/inner-conversation.js +++ /dev/null @@ -1,163 +0,0 @@ -(function() { - function handleChatRoomClick(event) { - const chatId = event.currentTarget.getAttribute('data-roomid'); - if (chatId && chatId !== currentChatId) { - showLoader(); - openConversation(chatId); - currentChatId = chatId; - } - } - - document.querySelectorAll('.chat-room').forEach(div => { - div.addEventListener('click', handleChatRoomClick); - }); - - - function markCurrentChatRead(chatid) { - const unreadElement = document.querySelector(`.unread[data-roomid='${chatid}']`); - if (unreadElement) { - unreadElement.classList.add('hidden'); - } - } - - // FUNCTIONS TO SHOW & HIDE THE LOADER - function showLoader() { - const roomLoader = document.getElementById('roomLoader'); - if (roomLoader) { - roomLoader.classList.remove('hidden'); - } - - const widgetLeftSide = document.getElementById('widgetLeftSide'); - widgetLeftSide.classList.remove('overflow-y-auto'); - widgetLeftSide.classList.add('overflow-hidden'); - } - - function hideLoader() { - const roomLoader = document.getElementById('roomLoader'); - if (roomLoader) { - roomLoader.classList.add('hidden'); - } - - const widgetLeftSide = document.getElementById('widgetLeftSide'); - widgetLeftSide.classList.remove('overflow-hidden'); - widgetLeftSide.classList.add('overflow-y-auto'); - } - - function appendTextAreaScript(conversationContainer) { - const textareaScript = document.createElement('script'); - textareaScript.type = 'text/javascript'; - textareaScript.src = `${protocol}://${admin_chat_domain}/static/js/osichat-admin/textarea.js`; - conversationContainer.appendChild(textareaScript); - } - - // function scrollBottom() { - // const conversationContainer = document.getElementById('messages_container'); - // if (conversationContainer) { - // conversationContainer.scrollTo({ - // top: conversationContainer.scrollHeight, - // behavior: 'smooth' - // }); - // } - // } - - function scrollBottom() { - const conversationContainer = document.getElementById('messages_container'); - if (conversationContainer) { - conversationContainer.scrollTop = conversationContainer.scrollHeight; // Instantly scroll to the bottom - } - } - - - function openConversation(chatId) { - if (osichatadminroomSocket) { - osichatadminroomSocket.close(); - } - - osichatadminroomSocket = new WebSocket(`${admin_chat_ws_scheme}://${admin_chat_domain}/ws/osichat-admin/${chatId}/`); - - osichatadminroomSocket.onopen = function () { - hideLoader(); - markCurrentChatRead(chatId) - console.log('WebSocket connection to osichat established'); - osichatadminroomSocket.send(JSON.stringify({ 'event_type': 'load_chat', 'client_type': 'website_admin' })); - osichatadminroomSocket.send(JSON.stringify({ 'event_type': 'update_read_messages', 'user_id': userId, 'chat_state': 'open' })); - }; - - function handleLoadChatEvent(data) { - let chatDiv = document.getElementById('widgetRightSide'); - chatDiv.innerHTML = data.html; - appendTextAreaScript(chatDiv); - - const sendMessageForm = document.querySelector('#sendMessage'); - sendMessageForm.addEventListener('submit', function (event) { - event.preventDefault(); - const message = event.target.elements.message.value; - const eventMessage = { - 'event_type': 'send_message', - 'message': message, - 'user_id': userId - }; - - osichatadminroomSocket.send(JSON.stringify(eventMessage)); - event.target.reset(); - }); - - scrollBottom(); - } - - osichatadminroomSocket.onmessage = function (e) { - const data = JSON.parse(e.data); - const typingDiv = document.getElementById('typing'); - const messagesDiv = document.getElementById('messages_container'); - switch (data.event_type) { - case 'load_chat': - handleLoadChatEvent(data); - break; - case 'typing': - if (!typingDiv && data.user != userId) { - messagesDiv.insertAdjacentHTML('beforeend', data.html); - } - break; - case 'stopped_typing': - if (typingDiv) { - typingDiv.remove(); - } - break; - case 'send_message': - osichatadminroomSocket.send(JSON.stringify({ 'event_type': 'update_read_messages', 'user_id': userId, 'chat_state': 'open' })); - messagesDiv.insertAdjacentHTML('beforeend', data.html); - if (!data.user){ - if (typingDiv) { - typingDiv.remove(); - } - } - break; - default: - console.log('Unknown event type:', data.event_type); - } - }; - - osichatadminroomSocket.onclose = function () { - console.log('WebSocket connection closed'); - if (currentChatId === chatId) { //Attempt to reconnect only if same chat - setTimeout(() => { - console.log('Attempting to reconnect to WebSocket...'); - openConversation(chatId); - }, 2000); - } - }; - - osichatadminroomSocket.onerror = function (error) { - console.error('WebSocket error:', error); - showLoader(); - }; - } - - window.addEventListener('offline', () => { - showLoader(); - if (osichatadminroomSocket) { - osichatadminroomSocket.close(); - } - }); - -})(); diff --git a/osinaweb/static/js/osichat-admin/osichat.js b/osinaweb/static/js/osichat-admin/osichat.js deleted file mode 100644 index bd31082e..00000000 --- a/osinaweb/static/js/osichat-admin/osichat.js +++ /dev/null @@ -1,224 +0,0 @@ -let admin_chat_ws_scheme = window.location.protocol === "https:" ? "wss" : "ws"; -let protocol = window.location.protocol === "https:" ? "https" : "http"; -let admin_chat_domain = "osina.ositcom.com"; -let osichatadminroomSocket = null; -let currentChatId = null; -let whereAmI = null; - -// FUNCTIONS TO SHOW & HIDE THE LOADER -function showLoader() { - const roomsLoader = document.getElementById('roomsLoader'); - if (roomsLoader) { - roomsLoader.classList.remove('hidden'); - } -} - -function hideLoader() { - const roomsLoader = document.getElementById('roomsLoader'); - if (roomsLoader) { - roomsLoader.classList.add('hidden'); - } -} - - -function appendInnerConversationScript(div) { - const innerConversationScript = document.createElement('script'); - innerConversationScript.type = 'text/javascript'; - innerConversationScript.src = `${protocol}://${admin_chat_domain}/static/js/osichat-admin/inner-conversation.js`; - div.appendChild(innerConversationScript); -} - - - -function initializeOsichat(){ - osichatroomsSocket = new WebSocket(`${admin_chat_ws_scheme}://${admin_chat_domain}/ws/osichat/`); - - osichatroomsSocket.onopen = function () { - console.log('WebSocket connection to rooms established'); - osichatroomsSocket.send(JSON.stringify({ - 'event_type': 'set_client_type', - 'client_type': 'website_admin', - 'whereAmI': whereAmI === 'Visitors' ? 'Visitors' : 'Chats' // Default to 'Chats' if not 'Visitors' - })); - }; - - osichatroomsSocket.onmessage = function (e) { - const data = JSON.parse(e.data); - const leftDiv = document.getElementById('widgetLeftSide'); - const leftDynamicDiv = document.getElementById('leftDynamic'); - switch (data.event_type) { - case 'get_chats': - hideLoader(); - leftDynamicDiv.innerHTML = data.html; - appendInnerConversationScript(leftDiv); - break; - - case 'get_visitors': - hideLoader(); - leftDynamicDiv.innerHTML = data.html; - setupDurationUpdater(); - break; - - case 'new_chat_update': - const roomsContainer = document.getElementById('chatrooms'); - const chatRoomDiv = roomsContainer.querySelector(`.chat-room[data-roomid='${data.chatroom_id}']`); - - if (chatRoomDiv) { - chatRoomDiv.remove(); // Remove the existing chat room div - } - // Insert the new chat room HTML at the top of the container - const newChatRoomDiv = document.createElement('div'); - newChatRoomDiv.innerHTML = data.html; - roomsContainer.insertAdjacentElement('afterbegin', newChatRoomDiv.firstElementChild); - - if (parseInt(currentChatId) === parseInt(data.chatroom_id)) { - const unreadIndicator = roomsContainer.querySelector(`.unread[data-roomid='${data.chatroom_id}']`); - if (unreadIndicator) { - unreadIndicator.classList.add('hidden'); - } - if (!data.user) { // If it is sent by a guest play a notification sound for the guest - const notificationSound = document.getElementById('notification-sound'); - notificationSound.play(); - - } - } else { - const unreadIndicator = roomsContainer.querySelector(`.unread[data-roomid='${data.chatroom_id}']`); - if (unreadIndicator) { - unreadIndicator.classList.remove('hidden'); - } - if (!data.user) { // If it is sent by a guest play a notification sound for the guest - const notificationSound = document.getElementById('out-notification-sound'); - notificationSound.play(); - } - } - - setInterval(updateOnlineDurations, 1000); - appendInnerConversationScript(leftDiv); - break; - - case 'new_visitor_update': - const visitorsContainer = document.getElementById('visitors'); - const visitorDiv = visitorsContainer.querySelector(`.visitor[data-visitorid='${data.visitor_id}']`); - if (data.action === 'new_log') { - if (visitorDiv){ - visitorDiv.remove(); - } - const newVisitorDiv = document.createElement('div'); - newVisitorDiv.innerHTML = data.html; - visitorsContainer.insertAdjacentElement('afterbegin', newVisitorDiv.firstElementChild); - const visitorNotificationSound = document.getElementById('visitor-notification-sound'); - visitorNotificationSound.play(); - } else if (data.action === 'end_log') { - const newVisitorDiv = document.createElement('div'); - newVisitorDiv.innerHTML = data.html; - visitorDiv.replaceWith(newVisitorDiv.firstElementChild); - } - - - setupDurationUpdater(); - break; - - default: - console.log('Unknown event type:', data.event_type); - } - }; - - osichatroomsSocket.onclose = function () { - showLoader(); - setTimeout(() => { - console.log('Attempting to reconnect to WebSocket...'); - initializeOsichat(); - }, 2000); - }; - - osichatroomsSocket.onerror = function (error) { - showLoader(); - console.error('WebSocket error:', error); - }; - - window.addEventListener('offline', () => { - showLoader(); - if (osichatroomsSocket) { - osichatroomsSocket.close(); - } - }); - -} - -const chatsTab = document.getElementById('chatsTab'); -const visitorsTab = document.getElementById('visitorsTab'); - -function switchToChats() { - showLoader(); - whereAmI = 'Chats'; - chatsTab.classList.add('bg-white', 'text-secondosiblue', 'shadow-md'); - chatsTab.classList.remove('bg-gray-100', 'text-gray-400'); - visitorsTab.classList.add('bg-gray-100', 'text-gray-400'); - visitorsTab.classList.remove('bg-white', 'text-secondosiblue', 'shadow-md'); - - osichatroomsSocket.send(JSON.stringify({ - event_type: 'get_chats' - })); -} - -function switchToVisitors() { - showLoader(); - whereAmI = 'Visitors'; - visitorsTab.classList.add('bg-white', 'text-secondosiblue', 'shadow-md'); - visitorsTab.classList.remove('bg-gray-100', 'text-gray-400'); - chatsTab.classList.add('bg-gray-100', 'text-gray-400'); - chatsTab.classList.remove('bg-white', 'text-secondosiblue', 'shadow-md'); - - osichatroomsSocket.send(JSON.stringify({ - event_type: 'get_visitors' - })); -} - -chatsTab.addEventListener('click', switchToChats); -visitorsTab.addEventListener('click', switchToVisitors); - - - -let updateInterval; -function updateOnlineDurations() { - document.querySelectorAll('.visitor').forEach(visitorDiv => { - const onlineIndicator = visitorDiv.querySelector('.online'); - if (onlineIndicator) { - const durationElem = visitorDiv.querySelector('.duration'); - const currentText = durationElem.textContent; - const parts = currentText.split(':').map(Number); - - let hours = 0, minutes = 0, seconds = 0; - - if (parts.length === 3) { - [hours, minutes, seconds] = parts; - } else if (parts.length === 2) { - [minutes, seconds] = parts; - } - - const totalSeconds = hours * 3600 + minutes * 60 + seconds; - const updatedTotalSeconds = totalSeconds + 1; - const updatedHours = Math.floor(updatedTotalSeconds / 3600); - const updatedMinutes = Math.floor((updatedTotalSeconds % 3600) / 60); - const updatedSeconds = updatedTotalSeconds % 60; - - const formattedDuration = - (updatedHours > 0 ? `${String(updatedHours).padStart(2, '0')}:` : '') + - `${String(updatedMinutes).padStart(2, '0')}:${String(updatedSeconds).padStart(2, '0')}`; - - durationElem.textContent = formattedDuration; - } - }); -} - -function setupDurationUpdater() { - // Clear any existing interval to avoid multiple intervals - if (updateInterval) { - clearInterval(updateInterval); - } - // Set up a new interval - updateInterval = setInterval(updateOnlineDurations, 1000); -} - - -initializeOsichat(); \ No newline at end of file diff --git a/osinaweb/static/js/osichat-admin/textarea.js b/osinaweb/static/js/osichat-admin/textarea.js deleted file mode 100644 index c8840d12..00000000 --- a/osinaweb/static/js/osichat-admin/textarea.js +++ /dev/null @@ -1,84 +0,0 @@ -(function() { - // FUNCTION TO ADJUST TEXTAREA HEIGHT AND SUBMIT BUTTON VISIBILITY - function adjustTextAreaAndButton(textarea, submitButton) { - // Adjust the height of the textarea - if (textarea.value.trim() === '') { - textarea.style.height = '50px'; - } else { - textarea.style.height = textarea.scrollHeight + 'px'; - } - - // Display and hide the submit button - if (textarea.value.trim() === '') { - submitButton.classList.add('hidden'); - } else { - submitButton.classList.remove('hidden'); - } - } - - function scrollBottom() { - const conversationContainer = document.getElementById('messages_container'); - - if (conversationContainer) { - conversationContainer.scrollTo({ - top: conversationContainer.scrollHeight, - behavior: 'smooth' - }); - } - } - - - // INITIALIZE ELEMENTS - const form = document.querySelector('#sendMessage'); - const textarea = document.querySelector('#dynamicTextarea'); - const submitButton = document.getElementById('submitMessageButton'); - const typingUserId = document.getElementById('userId').textContent.trim(); - let typingTimeout; - let isTyping = false; - - // EVENT LISTENERS - textarea.addEventListener('input', function () { - // Adjust textarea and button - adjustTextAreaAndButton(textarea, submitButton); - if (!isTyping){ - osichatadminroomSocket.send(JSON.stringify({ - 'event_type': 'typing', - 'user_id': typingUserId, - 'typing_status': 'typing' - })); - isTyping = true; - } - - clearTimeout(typingTimeout); - typingTimeout = setTimeout(function() { - osichatadminroomSocket.send(JSON.stringify({ - 'event_type': 'typing', - 'user_id': typingUserId, - 'typing_status': 'stopped_typing' - })); - isTyping = false; - }, 3000); - }); - - - - form.addEventListener('submit', (event) => { - textarea.style.height = '50px'; - submitButton.classList.add('hidden'); - - setTimeout(() => { - scrollBottom(); - }, 100); - }); - - textarea.addEventListener('keydown', (event) => { - if (event.key === 'Enter' && !event.shiftKey) { - event.preventDefault(); - if (!submitButton.classList.contains('hidden')) { - submitButton.click(); - } - scrollBottom(); - } - }); - -})(); diff --git a/osinaweb/static/js/osichat-admin/update-visitors-duration.js b/osinaweb/static/js/osichat-admin/update-visitors-duration.js deleted file mode 100644 index d12c18ef..00000000 --- a/osinaweb/static/js/osichat-admin/update-visitors-duration.js +++ /dev/null @@ -1,27 +0,0 @@ -function updateOnlineDurations() { - document.querySelectorAll('.visitor').forEach(visitorDiv => { - if (visitorDiv.querySelector('.online')) { - const durationElem = visitorDiv.querySelector('.duration'); - const currentText = durationElem.textContent; - const [hours, minutes, seconds] = currentText.split(':').map(Number); - const totalSeconds = hours * 3600 + minutes * 60 + seconds; - - // Increment the duration by 1 second - const updatedTotalSeconds = totalSeconds + 1; - const updatedHours = Math.floor(updatedTotalSeconds / 3600); - const updatedMinutes = Math.floor((updatedTotalSeconds % 3600) / 60); - const updatedSeconds = updatedTotalSeconds % 60; - - // Format the updated duration - const formattedDuration = - (updatedHours > 0 ? `${String(updatedHours).padStart(2, '0') + ':' : ''}` + - `${String(updatedMinutes).padStart(2, '0')}:${String(updatedSeconds).padStart(2, '0')}`); - - // Update the duration element - durationElem.textContent = formattedDuration; - } - }); -} - -// Call this function at intervals to update durations -setInterval(updateOnlineDurations, 1000); // Update every second diff --git a/osinaweb/static/js/osichat/chat-toggle.js b/osinaweb/static/js/osichat/chat-toggle.js deleted file mode 100644 index 6573386b..00000000 --- a/osinaweb/static/js/osichat/chat-toggle.js +++ /dev/null @@ -1,87 +0,0 @@ - -(function() { - const openChatButton = document.getElementById('openChatContainer'); - const openChatButton2 = document.getElementById('openChatContainer2'); - const chatWidget = document.getElementById('chatWidget'); - const closeChatButton = document.getElementById('closeChatContainer'); - const closeMobileChatButton = document.getElementById('closeMobileChatContainer'); - const conversation = document.getElementById('conversation'); - - const unreadMessages = document.getElementById('unreadMessages'); - const closeNewMesagePopup = document.getElementById('closeNewMesagePopup'); - - function scrollToBottom() { - conversation.scrollTop = conversation.scrollHeight; - } - - function toggleBodyScroll(preventScroll) { - if (preventScroll) { - document.body.classList.add('no-scroll'); - } else { - document.body.classList.remove('no-scroll'); - } - } - - function checkScreenSize() { - if (chatWidget.classList.contains('hidden')) { - return; - } - if (window.innerWidth < 798) { - toggleBodyScroll(true); - } else { - toggleBodyScroll(false); - } - } - - function openChat() { - isOpen = true; - chatWidget.classList.remove('hidden'); - openChatButton.classList.add('hidden'); - closeChatButton.classList.remove('hidden'); - if (unreadMessages) { - unreadMessages.classList.add('hidden'); - } - osichatSocket.send(JSON.stringify({ 'event_type': 'update_read_messages', 'chat_state': 'open' })); - scrollToBottom(); - checkScreenSize(); - } - - function closeChat() { - isOpen = false; - chatWidget.classList.add('hidden'); - openChatButton.classList.remove('hidden'); - if (closeChatButton) { - closeChatButton.classList.add('hidden'); - } else if (closeMobileChatButton) { - closeMobileChatButton.classList.add('hidden'); - } - toggleBodyScroll(false); - } - - // Attach event listeners - openChatButton.addEventListener('click', openChat); - if (openChatButton2) { - openChatButton2.addEventListener('click', openChat); - } - closeChatButton.addEventListener('click', closeChat); - closeMobileChatButton.addEventListener('click', closeChat); - window.addEventListener('resize', checkScreenSize); - - // CSS class to prevent scrolling - const style = document.createElement('style'); - style.innerHTML = ` - .no-scroll { - overflow: hidden; - } - `; - document.head.appendChild(style); - - // To close the unread messages popup - if (closeNewMesagePopup) { - closeNewMesagePopup.addEventListener('click', function() { - if (unreadMessages) { - unreadMessages.classList.add('hidden') - } - }); - } -})(); diff --git a/osinaweb/static/js/osichat/conversation.js b/osinaweb/static/js/osichat/conversation.js deleted file mode 100644 index 3bd9ee4b..00000000 --- a/osinaweb/static/js/osichat/conversation.js +++ /dev/null @@ -1,345 +0,0 @@ - -let osichatSocket; -let isOpen = false; -let chatLoaded = false; -let newMessageCount = 0; -let atBottom = true; - - -function scrollBottom() { - const conversationContainer = document.getElementById('conversation'); - - if (conversationContainer) { - conversationContainer.scrollTo({ - top: conversationContainer.scrollHeight, - behavior: 'smooth' - }); - } -} - - -function isScrolledToBottom(element) { - return element && (element.scrollHeight - element.scrollTop <= element.clientHeight + 200); -} - - - -function setupScrollEventListener() { - const conversationContainer = document.getElementById('conversation'); - - if (conversationContainer) { - conversationContainer.addEventListener('scroll', () => { - if (isScrolledToBottom(conversationContainer)) { - if (!atBottom) { - hideNewMessageNotification(); - atBottom = true; // Update flag when user scrolls to the bottom - } - } else { - atBottom = false; // Update flag if user is not at the bottom - } - }); - } -} - -function showNewMessageNotification(count) { - const newMessagesPopMessage = document.getElementById('newMessagesPopMessage'); - const newMessagesCounter = document.getElementById('newMessagesCounter'); - if (newMessagesPopMessage && newMessagesCounter) { - newMessagesCounter.textContent = count; - newMessagesPopMessage.classList.remove('hidden'); - } -} - -function hideNewMessageNotification() { - const newMessagesPopMessage = document.getElementById('newMessagesPopMessage'); - if (newMessagesPopMessage) { - newMessagesPopMessage.classList.add('hidden'); - newMessageCount = 0; - const newMessagesCounter = document.getElementById('newMessagesCounter'); - if (newMessagesCounter) { - newMessagesCounter.textContent = newMessageCount; - } - scrollBottom() - } -} - - -function newMessageNotification() { - const notificationSound = document.getElementById('notification-sound'); - notificationSound.play(); - - const conversationContainer = document.getElementById('conversation'); - - if (!isScrolledToBottom(conversationContainer)) { - let count = newMessageCount + 1; - newMessageCount = count; - showNewMessageNotification(count); - } else { - scrollBottom(); - } - -} - - -// FUNCTION TO FETCH THE SESSION ID -async function fetchSessionID() { - let session_id = 'Unknown'; - while (session_id === 'Unknown') { - try { - const response = await fetch(`${protocol}://${ositcomDomain}/get-client-session/`); - const data = await response.json(); - if (data.session_id) { - session_id = data.session_id; - } - } catch (error) { - console.error('Error fetching session ID:', error); - } - } - return session_id; -} - -// FUNCTIONS TO SHOW & HIDE THE LOADER -function showLoader() { - const osichatLoader = document.getElementById('osichatLoader'); - if (osichatLoader) { - osichatLoader.classList.remove('hidden'); - } -} - -function hideLoader() { - const osichatLoader = document.getElementById('osichatLoader'); - if (osichatLoader) { - osichatLoader.classList.add('hidden'); - } -} - - - -// FUNCTION TO APPEND THE TEXTAREA SCRIPT -function appendTextAreaScript(domain, chatDiv) { - const textareaScript = document.createElement('script'); - textareaScript.type = 'text/javascript'; - textareaScript.src = `${protocol}://${domain}/static/js/osichat/textarea.js`; - chatDiv.appendChild(textareaScript); -} - -// FUNCTION TO HANDLE FORM SUBMISSION -function handleFormSubmission(form, eventType, osichatSocket) { - form.addEventListener('submit', function (event) { - event.preventDefault(); - - const formData = new FormData(form); - const eventMessage = { 'event_type': 'start_conversation' }; - - formData.forEach((value, key) => { - eventMessage[key] = value; - }); - - osichatSocket.send(JSON.stringify(eventMessage)); - form.reset(); - }); -} - -// FUNCTION TO HANDLE LOAD CHAT EVENT -function handleLoadChatEvent(data, osichatSocket) { - chatLoaded = true; - hideLoader(); - let chatDiv = document.getElementById('roomContainer'); // CASE WHERE WIDGET IS ALREADY LOADED, DISPLAY THE CHAT PAGES(START/CONVERSATION) IN ROOM CONTAINER - if (!chatDiv) { - chatDiv = document.getElementById('osichat'); // CASE WHERE WIDGET IS NOT LOADED, DISPLAY THE WHOLE CHATWIDGET IN OSICHAT - } - - chatDiv.innerHTML = data.html; - scrollBottom(); - - - if (isOpen) { // If chat widget isOpen mark all messages as read by guest else just return number of unread messages - osichatSocket.send(JSON.stringify({ 'event_type': 'update_read_messages', 'chat_state': 'open' })); - } else { - osichatSocket.send(JSON.stringify({ 'event_type': 'update_read_messages', 'chat_state': 'closed' })); - } - - - if (!document.querySelector(`script[src="${protocol}://${osinaDomain}/static/js/osichat/chat-toggle.js"]`)) { - const script = document.createElement('script'); - script.type = 'text/javascript'; - script.src = `${protocol}://${osinaDomain}/static/js/osichat/chat-toggle.js`; - chatDiv.appendChild(script); - } - - const startChatContainer = document.getElementById('startChat'); //Case where returned is start-conversation.html - if (startChatContainer) { - handleFormSubmission(startChatContainer, 'start_conversation', osichatSocket); - } - - const sendMessageContainer = document.getElementById('sendMessage'); //Case where returned is chat-room.html - if (sendMessageContainer) { - appendTextAreaScript(osinaDomain, chatDiv); - handleFormSubmission(sendMessageContainer, 'send_message', osichatSocket); - - const uploadScript = document.createElement('script'); - uploadScript.type = 'text/javascript'; - uploadScript.src = `${protocol}://${osinaDomain}/static/js/osichat/upload-file.js`; - chatDiv.appendChild(uploadScript); - - const endChatScript = document.createElement('script'); - endChatScript.type = 'text/javascript'; - endChatScript.src = `${protocol}://${osinaDomain}/static/js/osichat/end-chat.js`; - chatDiv.appendChild(endChatScript); - - const endChatButton = document.getElementById('endChat'); - endChatButton.classList.remove('hidden') - } - - const sendReviewContainer = document.getElementById('reviewContainer'); //Case where returned is ended-chat.html - if (sendReviewContainer) { - const sendReviewScript = document.createElement('script'); - sendReviewScript.type = 'text/javascript'; - sendReviewScript.src = `${protocol}://${osinaDomain}/static/js/osichat/send-review.js`; - chatDiv.appendChild(sendReviewScript); - } -} - - -// FUNCTION TO INITIALIZE WEB SOCKET CONNECTION -async function initializeChatWebSocket() { - const session_id = await fetchSessionID(); - let osichatSocketUrl = `${wsScheme}://${osinaDomain}/ws/osichat/${session_id}/`; - osichatSocket = new WebSocket(osichatSocketUrl); - - osichatSocket.onopen = () => { - if(!chatLoaded){ - osichatSocket.send(JSON.stringify({ 'event_type': 'load_chat', 'client_type': 'website_guest', 'reconnecting': 'False'})); - }else{ - osichatSocket.send(JSON.stringify({ 'event_type': 'load_chat', 'client_type': 'website_guest', 'reconnecting': 'True'})); - } - }; - - osichatSocket.onmessage = function (e) { - const data = JSON.parse(e.data); - const typingDiv = document.getElementById('typing'); - const messagesDiv = document.getElementById('messages'); - switch (data.event_type) { - case 'load_chat': - handleLoadChatEvent(data, osichatSocket); - break; - case 'start_conversation': - handleLoadChatEvent(data, osichatSocket); - break; - case 'typing': - if(!typingDiv && data.user){ - messagesDiv.insertAdjacentHTML('beforeend', data.html); - } - break; - case 'stopped_typing': - if (typingDiv) { - typingDiv.remove(); - } - break; - case 'send_message': - if (isOpen) { // If chat widget isOpen (declared in chat-toggle.js) mark all messages as read by guest else just return number of unread messages - osichatSocket.send(JSON.stringify({ 'event_type': 'update_read_messages', 'chat_state': 'open' })); - } else { - osichatSocket.send(JSON.stringify({ 'event_type': 'update_read_messages', 'chat_state': 'closed' })); - } - messagesDiv.insertAdjacentHTML('beforeend', data.html); - - const newMessagesPopMessage = document.getElementById('newMessagesPopMessage'); - newMessagesPopMessage.addEventListener('click', hideNewMessageNotification); - - if (data.user) { // If it is sent by an Osina user play a notification sound for the guest - if (typingDiv) { - typingDiv.remove(); - } - newMessageNotification(); - setupScrollEventListener(); - } - break; - case 'uploaded_file': - if (isOpen) { - osichatSocket.send(JSON.stringify({ 'event_type': 'update_read_messages', 'chat_state': 'open' })); - } else { - osichatSocket.send(JSON.stringify({ 'event_type': 'update_read_messages', 'chat_state': 'closed' })); - } - const uploadingDiv = document.getElementById(`uploading-${data.file_name}`); - if (uploadingDiv) { - uploadingDiv.outerHTML = data.html; - if (!data.user) { - scrollBottom(); - } else { - newMessageNotification(); - } - } - else{ - document.getElementById('messages').insertAdjacentHTML('beforeend', data.html); - if (!data.user) { - scrollBottom(); - } else { - newMessageNotification(); - } - } - break; - case 'update_read_messages': - const unreadMessages = document.getElementById(`unreadMessages`); - if (!isOpen) { - unreadMessages.classList.remove('hidden'); - unreadMessages.innerHTML = data.html; - const script = document.createElement('script'); - script.src = `${protocol}://${osinaDomain}/static/js/osichat/chat-toggle.js`; - document.body.appendChild(script); - } else { - unreadMessages.classList.add('hidden'); - } - break; - case 'ended_chat': - const currentChat = document.getElementById(`roomContainer`); - if (currentChat) { - currentChat.innerHTML = data.html; - scrollBottom(); - } - document.getElementById(`endChatConfirmationContainer`).classList.add('hidden'); - document.getElementById(`endChat`).classList.add('hidden'); - const sendReviewScript = document.createElement('script'); - sendReviewScript.type = 'text/javascript'; - sendReviewScript.src = `${protocol}://${osinaDomain}/static/js/osichat/send-review.js`; - currentChat.appendChild(sendReviewScript); - break; - case 'submit_review': - const submitReview = document.getElementById(`reviewContainer`); - if (submitReview) { - submitReview.innerHTML = data.html; - } - const reviewScript = document.createElement('script'); - reviewScript.type = 'text/javascript'; - reviewScript.src = `${protocol}://${osinaDomain}/static/js/osichat/send-review.js`; - submitReview.appendChild(reviewScript); - break; - default: - console.log('Unknown event type:', data.event_type); - } - }; - - osichatSocket.onclose = () => { - showLoader(); - setTimeout(() => { - console.log('Attempting to reconnect to WebSocket...'); - initializeChatWebSocket(); - }, 2000); - }; - - osichatSocket.onerror = (error) => { - console.log('WebSocket error:', error); - showLoader(); - }; -} - - -window.addEventListener('offline', () => { - showLoader(); - if (osichatSocket) { - osichatSocket.close(); - } -}); - -// INITIALIZE CHAT WEB SOCKET -initializeChatWebSocket(); diff --git a/osinaweb/static/js/osichat/end-chat.js b/osinaweb/static/js/osichat/end-chat.js deleted file mode 100644 index f27e0367..00000000 --- a/osinaweb/static/js/osichat/end-chat.js +++ /dev/null @@ -1,28 +0,0 @@ -(function() { - const endChat = document.getElementById('endChat'); - const endChatConfirmationContainer = document.getElementById("endChatConfirmationContainer"); - const closeConfirmationMessage = document.getElementById('closeConfirmationMessage'); - const endChatConfirmed = document.getElementById('endChatComfirmed'); - - - endChat.addEventListener("click", function() { - if (endChatConfirmationContainer) { - endChatConfirmationContainer.classList.remove("hidden"); - } - }); - - closeConfirmationMessage.addEventListener("click", function() { - if (closeConfirmationMessage) { - endChatConfirmationContainer.classList.add("hidden"); - } - }); - - endChatConfirmed.addEventListener("click", function() { - const eventMessage = { - event_type: 'end_chat', - }; - osichatSocket.send(JSON.stringify(eventMessage)); - - }); - -})(); diff --git a/osinaweb/static/js/osichat/send-review.js b/osinaweb/static/js/osichat/send-review.js deleted file mode 100644 index c88f776a..00000000 --- a/osinaweb/static/js/osichat/send-review.js +++ /dev/null @@ -1,57 +0,0 @@ -(function () { - const messageInput = document.getElementById('messageInputTag'); - const submitButton = document.getElementById('submitButton'); - if (messageInput){ - messageInput.addEventListener('input', function () { - if (messageInput.value.trim() !== "") { - submitButton.classList.remove('hidden'); - } else { - submitButton.classList.add('hidden'); - } - }); - } - - - document.querySelectorAll('.reaction-button').forEach(button => { - button.addEventListener('click', function() { - const reaction = this.getAttribute('data-reaction'); - const eventMessage = { - event_type: 'submit_review', - reaction: reaction - }; - osichatSocket.send(JSON.stringify(eventMessage)); - }); - }); - - - - if (document.getElementById('sendReview')){ - document.getElementById('sendReview').addEventListener('submit', function(event) { - event.preventDefault(); - - const details = document.getElementById('messageInputTag').value.trim(); - if (details) { - const eventMessage = { - event_type: 'submit_review', - details: details - }; - - osichatSocket.send(JSON.stringify(eventMessage)); - } else { - console.error('Details cannot be empty'); - } - }); - } - - - - document.getElementById("startNewConversation").addEventListener("click", function() { - const eventMessage = { - event_type: "start_conversation" - }; - osichatSocket.send(JSON.stringify(eventMessage)); - }); - - - -})(); \ No newline at end of file diff --git a/osinaweb/static/js/osichat/textarea.js b/osinaweb/static/js/osichat/textarea.js deleted file mode 100644 index b177b473..00000000 --- a/osinaweb/static/js/osichat/textarea.js +++ /dev/null @@ -1,82 +0,0 @@ -(function () { - // FUNCTION TO ADJUST TEXTAREA HEIGHT AND SUBMIT BUTTON VISIBILITY - function adjustTextAreaAndButton(textarea, submitButton) { - // Adjust the height of the textarea - if (textarea.value.trim() === '') { - textarea.style.height = '50px'; - } else { - textarea.style.height = textarea.scrollHeight + 'px'; - } - - // Display and hide the submit button - if (textarea.value.trim() === '') { - submitButton.classList.add('hidden'); - } else { - submitButton.classList.remove('hidden'); - } - } - - function scrollBottom() { - const conversationContainer = document.getElementById('conversation'); - - if (conversationContainer) { - conversationContainer.scrollTo({ - top: conversationContainer.scrollHeight, - behavior: 'smooth' - }); - } - } - - - // INITIALIZE ELEMENTS - const form = document.querySelector('#sendMessage'); - const textarea = document.querySelector('#dynamicTextarea'); - const submitButton = document.getElementById('submitMessageButton'); - let typingTimeout; - let isTyping = false; - - - // EVENT LISTENERS - textarea.addEventListener('input', function () { - // Adjust textarea and button - adjustTextAreaAndButton(dynamicTextarea, submitButton); - - if (!isTyping) { - osichatSocket.send(JSON.stringify({ - 'event_type': 'typing', - 'typing_status': 'typing' - })); - isTyping = true; - } - - clearTimeout(typingTimeout); - typingTimeout = setTimeout(function() { - osichatSocket.send(JSON.stringify({ - 'event_type': 'typing', - 'typing_status': 'stopped_typing' - })); - isTyping = false; - }, 3000); - }); - - - form.addEventListener('submit', (event) => { - textarea.style.height = '50px'; - submitButton.classList.add('hidden'); - - setTimeout(() => { - scrollBottom(); - }, 100); - }); - - textarea.addEventListener('keydown', (event) => { - if (event.key === 'Enter' && !event.shiftKey) { - event.preventDefault(); - if (!submitButton.classList.contains('hidden')) { - submitButton.click(); - } - scrollBottom(); - } - }); - -})(); diff --git a/osinaweb/static/js/osichat/upload-file.js b/osinaweb/static/js/osichat/upload-file.js deleted file mode 100644 index 1dad1c90..00000000 --- a/osinaweb/static/js/osichat/upload-file.js +++ /dev/null @@ -1,131 +0,0 @@ -(function () { - // TO TRIGGER TEH FILE UPLOADER WHEN CLICKING ON THE UPLOAD FILE SVG - document.getElementById('svgFileUpload').addEventListener('click', function () { - document.getElementById('fileupload').click(); - }); - - document.getElementById('fileupload').addEventListener('change', function (event) { - let files = event.target.files; - - for (let file of files) { - let formData = new FormData(); - formData.append('file', file); - formData.append('filename', file.name); - - // Display the file during upload - if (file.type.startsWith('image/')) { - displayImageDuringUpload(file); - } else { - displayDocumentDuringUpload(file); - } - - // Perform the upload - fetch(`${protocol}://${osinaDomain}/chat-file-uploader/`, { - method: 'POST', - body: formData, - }) - .then(response => response.json()) - .then(data => { - if (data.data === 'Uploaded Successfully') { - const fullPath = `${protocol}://${osinaDomain}/${data.existingPath}`; - updateSelectTag(fullPath, file.name); - if (file.type.startsWith('image/')) { - osichatSocket.send(JSON.stringify({ 'event_type': 'uploaded_file', 'path': data.existingPath, 'file_type': 'image', 'file_name': file.name })); - } else { - osichatSocket.send(JSON.stringify({ 'event_type': 'uploaded_file', 'path': data.existingPath, 'file_type': 'document', 'file_name': file.name })); - } - } else { - console.error('Upload failed'); - } - }) - .catch(error => console.error('Error:', error)); - } - event.target.value = ''; - }); - - function displayImageDuringUpload(file) { - let reader = new FileReader(); - reader.onload = function (event) { - let mainDiv = document.createElement('div'); - mainDiv.className = 'w-full flex items-end justify-end gap-2' - let outerDiv = document.createElement('div'); - outerDiv.id = 'uploading-' + file.name; - outerDiv.className = 'max-w-[80%] p-4 rounded-l-3xl rounded-tr-3xl text-white shadow-md text-sm leading-6 bg-opacity-70 bg-osiblue'; - - let div = document.createElement('div'); - let img = document.createElement('img'); - img.src = event.target.result; - img.style.opacity = '0.2'; - - div.appendChild(img); - - outerDiv.appendChild(div); - - mainDiv.appendChild(outerDiv); - - document.getElementById('messages').appendChild(mainDiv); - scrollBottom(); - }; - reader.readAsDataURL(file); - } - - - function displayDocumentDuringUpload(file) { - let mainDiv = document.createElement('div'); - mainDiv.className = 'w-full flex items-end justify-end gap-2' - let outerDiv = document.createElement('div'); - outerDiv.id = 'uploading-' + file.name; - outerDiv.className = 'max-w-[80%] p-4 rounded-l-3xl rounded-tr-3xl text-white shadow-md text-sm leading-6 bg-opacity-70 bg-osiblue'; - - let flexContainer = document.createElement('div'); - flexContainer.className = 'w-full flex items-center gap-1'; - - let svg = ` - - - - - - `; - - let svgDiv = document.createElement('div'); - svgDiv.innerHTML = svg; - - let textContainer = document.createElement('div'); - textContainer.className = 'flex flex-col'; - - let uploadingText = document.createElement('span'); - uploadingText.id = 'uploading-' + file.name; - uploadingText.textContent = 'Uploading...'; - - let fileNameDiv = document.createElement('div'); - fileNameDiv.className = 'file-name'; - fileNameDiv.textContent = file.name; - - textContainer.appendChild(uploadingText); - textContainer.appendChild(fileNameDiv); - - flexContainer.appendChild(svgDiv); - flexContainer.appendChild(textContainer); - - outerDiv.appendChild(flexContainer); - - mainDiv.appendChild(outerDiv); - - document.getElementById('messages').appendChild(mainDiv); - - scrollBottom(); - } - - - - - function updateSelectTag(path, fileName) { - let option = document.createElement('option'); - option.value = path; - option.textContent = fileName; - option.selected = true; - document.getElementById('filePathInput').appendChild(option); - } - -})(); diff --git a/osinaweb/static/js/osichat/visitors.js b/osinaweb/static/js/osichat/visitors.js deleted file mode 100644 index 2e3fed1a..00000000 --- a/osinaweb/static/js/osichat/visitors.js +++ /dev/null @@ -1,128 +0,0 @@ -const wsScheme = window.location.protocol === "https:" ? "wss" : "ws"; -const protocol = window.location.protocol === "https:" ? "https" : "http"; -const osinaDomain = "osina.ositcom.com"; -const ositcomDomain = "ositcom.com"; - - -async function fetchClientData() { - let clientData = { client_ip: 'Unknown', client_country: 'Unknown' }; - while (clientData.client_ip === 'Unknown') { - try { - const response = await fetch(`${protocol}://${osinaDomain}/get-client-ip/`); - const data = await response.json(); - if (data.ip) { - clientData = { - client_ip: data.ip, - client_country: data.country || 'Unknown', - client_region: data.region || 'Unknown' - }; - } - } catch (error) { - console.error('Error fetching client data:', error); - } - } - return clientData; -} - - -async function fetchVisitorsSession() { - let session_id = 'Unknown'; - while (session_id === 'Unknown') { - try { - const response = await fetch(`${protocol}://${ositcomDomain}/get-client-session/`); - const data = await response.json(); - if (data.session_id) { - session_id = data.session_id; - } - } catch (error) { - console.error('Error fetching session ID:', error); - } - } - return session_id; -} - - - -const getBrowserInfo = () => { - const userAgent = navigator.userAgent; - let browserName = "Unknown"; - let osName = "Unknown"; - - if (userAgent.indexOf("Firefox") > -1) { - browserName = "Firefox"; - } else if (userAgent.indexOf("SamsungBrowser") > -1) { - browserName = "Samsung Internet"; - } else if (userAgent.indexOf("Opera") > -1 || userAgent.indexOf("OPR") > -1) { - browserName = "Opera"; - } else if (userAgent.indexOf("Trident") > -1) { - browserName = "Internet Explorer"; - } else if (userAgent.indexOf("Edge") > -1) { - browserName = "Edge"; - } else if (userAgent.indexOf("Chrome") > -1) { - browserName = "Chrome"; - } else if (userAgent.indexOf("Safari") > -1) { - browserName = "Safari"; - } - - if (userAgent.indexOf("Win") > -1) { - osName = "Windows"; - } else if (userAgent.indexOf("Mac") > -1) { - osName = "MacOS"; - } else if (userAgent.indexOf("X11") > -1) { - osName = "UNIX"; - } else if (userAgent.indexOf("Linux") > -1) { - osName = "Linux"; - } else if (userAgent.indexOf("Android") > -1) { - osName = "Android"; - } else if (userAgent.indexOf("like Mac") > -1) { - osName = "iOS"; - } - - return { browserName, osName }; -}; - - -async function initializeVisitorsWebSocket() { - - const referrer = document.referrer; - const clientData = await fetchClientData(); - const session_id = await fetchVisitorsSession(); - const browserInfo = getBrowserInfo(); - const visitorsSocketUrl = `${wsScheme}://${osinaDomain}/ws/osichat/visitors/`; - const visitorsSocket = new WebSocket(visitorsSocketUrl); - - visitorsSocket.onopen = () => { - console.log('WebSocket connection to visitors established'); - - const event_message = { - 'event_type': 'visitor_ping', - 'referrer': referrer, - 'url': window.location.href, - 'title': window.document.title, - 'client_ip': clientData.client_ip, - 'client_country': clientData.client_country, - 'client_region': clientData.client_region, - 'browser_name': browserInfo.browserName, - 'os_name': browserInfo.osName, - 'session_id': session_id - }; - visitorsSocket.send(JSON.stringify(event_message)); - }; - - visitorsSocket.onclose = () => { - console.log('WebSocket connection to visitors closed'); - }; - - visitorsSocket.onerror = (error) => { - console.error('WebSocket error:', error); - }; - - window.addEventListener('offline', () => { - if (visitorsSocket) { - visitorsSocket.close(); - } - }); -} - - -initializeVisitorsWebSocket(); \ No newline at end of file diff --git a/osinaweb/support/__pycache__/__init__.cpython-313.pyc b/osinaweb/support/__pycache__/__init__.cpython-313.pyc index 6b85ea66..3ce43e8e 100644 Binary files a/osinaweb/support/__pycache__/__init__.cpython-313.pyc and b/osinaweb/support/__pycache__/__init__.cpython-313.pyc differ diff --git a/osinaweb/support/__pycache__/admin.cpython-313.pyc b/osinaweb/support/__pycache__/admin.cpython-313.pyc index c12e3e9e..0bfd6d29 100644 Binary files a/osinaweb/support/__pycache__/admin.cpython-313.pyc and b/osinaweb/support/__pycache__/admin.cpython-313.pyc differ diff --git a/osinaweb/support/__pycache__/apps.cpython-313.pyc b/osinaweb/support/__pycache__/apps.cpython-313.pyc index 507a1a43..15297d2d 100644 Binary files a/osinaweb/support/__pycache__/apps.cpython-313.pyc and b/osinaweb/support/__pycache__/apps.cpython-313.pyc differ diff --git a/osinaweb/support/__pycache__/consumers.cpython-313.pyc b/osinaweb/support/__pycache__/consumers.cpython-313.pyc index 4848f176..bead9f89 100644 Binary files a/osinaweb/support/__pycache__/consumers.cpython-313.pyc and b/osinaweb/support/__pycache__/consumers.cpython-313.pyc differ diff --git a/osinaweb/support/__pycache__/decorators.cpython-313.pyc b/osinaweb/support/__pycache__/decorators.cpython-313.pyc index 955946bb..1d8c2de1 100644 Binary files a/osinaweb/support/__pycache__/decorators.cpython-313.pyc and b/osinaweb/support/__pycache__/decorators.cpython-313.pyc differ diff --git a/osinaweb/support/__pycache__/models.cpython-313.pyc b/osinaweb/support/__pycache__/models.cpython-313.pyc index 9f02298c..fd63f651 100644 Binary files a/osinaweb/support/__pycache__/models.cpython-313.pyc and b/osinaweb/support/__pycache__/models.cpython-313.pyc differ diff --git a/osinaweb/support/__pycache__/routing.cpython-313.pyc b/osinaweb/support/__pycache__/routing.cpython-313.pyc index 467fde69..28b59397 100644 Binary files a/osinaweb/support/__pycache__/routing.cpython-313.pyc and b/osinaweb/support/__pycache__/routing.cpython-313.pyc differ diff --git a/osinaweb/support/__pycache__/urls.cpython-313.pyc b/osinaweb/support/__pycache__/urls.cpython-313.pyc index 9c4cd02b..c1983a0e 100644 Binary files a/osinaweb/support/__pycache__/urls.cpython-313.pyc and b/osinaweb/support/__pycache__/urls.cpython-313.pyc differ diff --git a/osinaweb/support/__pycache__/views.cpython-313.pyc b/osinaweb/support/__pycache__/views.cpython-313.pyc index 9d2cf055..5541acc7 100644 Binary files a/osinaweb/support/__pycache__/views.cpython-313.pyc and b/osinaweb/support/__pycache__/views.cpython-313.pyc differ diff --git a/osinaweb/support/add/__pycache__/urls.cpython-313.pyc b/osinaweb/support/add/__pycache__/urls.cpython-313.pyc index 7c93aeea..b1251dd3 100644 Binary files a/osinaweb/support/add/__pycache__/urls.cpython-313.pyc and b/osinaweb/support/add/__pycache__/urls.cpython-313.pyc differ diff --git a/osinaweb/support/add/__pycache__/views.cpython-313.pyc b/osinaweb/support/add/__pycache__/views.cpython-313.pyc index 8cfefe1b..da8487bb 100644 Binary files a/osinaweb/support/add/__pycache__/views.cpython-313.pyc and b/osinaweb/support/add/__pycache__/views.cpython-313.pyc differ diff --git a/osinaweb/support/migrations/__pycache__/0001_initial.cpython-313.pyc b/osinaweb/support/migrations/__pycache__/0001_initial.cpython-313.pyc index 6506d1db..0bff7b45 100644 Binary files a/osinaweb/support/migrations/__pycache__/0001_initial.cpython-313.pyc and b/osinaweb/support/migrations/__pycache__/0001_initial.cpython-313.pyc differ diff --git a/osinaweb/support/migrations/__pycache__/0002_remove_ticket_departments_and_more.cpython-313.pyc b/osinaweb/support/migrations/__pycache__/0002_remove_ticket_departments_and_more.cpython-313.pyc index d91733f8..70bb4d0a 100644 Binary files a/osinaweb/support/migrations/__pycache__/0002_remove_ticket_departments_and_more.cpython-313.pyc and b/osinaweb/support/migrations/__pycache__/0002_remove_ticket_departments_and_more.cpython-313.pyc differ diff --git a/osinaweb/support/migrations/__pycache__/0003_remove_ticket_status.cpython-313.pyc b/osinaweb/support/migrations/__pycache__/0003_remove_ticket_status.cpython-313.pyc index 0dd4c17c..e9e74c05 100644 Binary files a/osinaweb/support/migrations/__pycache__/0003_remove_ticket_status.cpython-313.pyc and b/osinaweb/support/migrations/__pycache__/0003_remove_ticket_status.cpython-313.pyc differ diff --git a/osinaweb/support/migrations/__pycache__/0004_alter_ticket_opened_date_ticketconnection.cpython-313.pyc b/osinaweb/support/migrations/__pycache__/0004_alter_ticket_opened_date_ticketconnection.cpython-313.pyc index 38d90b5e..9c0cdc88 100644 Binary files a/osinaweb/support/migrations/__pycache__/0004_alter_ticket_opened_date_ticketconnection.cpython-313.pyc and b/osinaweb/support/migrations/__pycache__/0004_alter_ticket_opened_date_ticketconnection.cpython-313.pyc differ diff --git a/osinaweb/support/migrations/__pycache__/0005_alter_ticketconnection_ticket.cpython-313.pyc b/osinaweb/support/migrations/__pycache__/0005_alter_ticketconnection_ticket.cpython-313.pyc index 56ca58bd..7bf0773a 100644 Binary files a/osinaweb/support/migrations/__pycache__/0005_alter_ticketconnection_ticket.cpython-313.pyc and b/osinaweb/support/migrations/__pycache__/0005_alter_ticketconnection_ticket.cpython-313.pyc differ diff --git a/osinaweb/support/migrations/__pycache__/0006_remove_ticketconnection_type_and_more.cpython-313.pyc b/osinaweb/support/migrations/__pycache__/0006_remove_ticketconnection_type_and_more.cpython-313.pyc index 72316f62..43ae7e5a 100644 Binary files a/osinaweb/support/migrations/__pycache__/0006_remove_ticketconnection_type_and_more.cpython-313.pyc and b/osinaweb/support/migrations/__pycache__/0006_remove_ticketconnection_type_and_more.cpython-313.pyc differ diff --git a/osinaweb/support/migrations/__pycache__/0007_alter_ticketstaff_staff.cpython-313.pyc b/osinaweb/support/migrations/__pycache__/0007_alter_ticketstaff_staff.cpython-313.pyc index 9bed7aef..c64d133f 100644 Binary files a/osinaweb/support/migrations/__pycache__/0007_alter_ticketstaff_staff.cpython-313.pyc and b/osinaweb/support/migrations/__pycache__/0007_alter_ticketstaff_staff.cpython-313.pyc differ diff --git a/osinaweb/support/migrations/__pycache__/0008_alter_tickettask_ticket.cpython-313.pyc b/osinaweb/support/migrations/__pycache__/0008_alter_tickettask_ticket.cpython-313.pyc index 6bbd3c42..2f5f5da4 100644 Binary files a/osinaweb/support/migrations/__pycache__/0008_alter_tickettask_ticket.cpython-313.pyc and b/osinaweb/support/migrations/__pycache__/0008_alter_tickettask_ticket.cpython-313.pyc differ diff --git a/osinaweb/support/migrations/__pycache__/0009_ticketconnection_terminated_at.cpython-313.pyc b/osinaweb/support/migrations/__pycache__/0009_ticketconnection_terminated_at.cpython-313.pyc index 5e62190c..bdb55ee2 100644 Binary files a/osinaweb/support/migrations/__pycache__/0009_ticketconnection_terminated_at.cpython-313.pyc and b/osinaweb/support/migrations/__pycache__/0009_ticketconnection_terminated_at.cpython-313.pyc differ diff --git a/osinaweb/support/migrations/__pycache__/0010_remove_ticketconnection_terminated.cpython-313.pyc b/osinaweb/support/migrations/__pycache__/0010_remove_ticketconnection_terminated.cpython-313.pyc index 9bbcbb35..3b464c55 100644 Binary files a/osinaweb/support/migrations/__pycache__/0010_remove_ticketconnection_terminated.cpython-313.pyc and b/osinaweb/support/migrations/__pycache__/0010_remove_ticketconnection_terminated.cpython-313.pyc differ diff --git a/osinaweb/support/migrations/__pycache__/__init__.cpython-313.pyc b/osinaweb/support/migrations/__pycache__/__init__.cpython-313.pyc index fd1bf71d..7a56c2cb 100644 Binary files a/osinaweb/support/migrations/__pycache__/__init__.cpython-313.pyc and b/osinaweb/support/migrations/__pycache__/__init__.cpython-313.pyc differ diff --git a/osinaweb/tailwind.config.js b/osinaweb/tailwind.config.js index bbcf4a2d..ecd8df71 100644 --- a/osinaweb/tailwind.config.js +++ b/osinaweb/tailwind.config.js @@ -7,7 +7,7 @@ module.exports = { "./customercore/templates/**/*.html", "./billing/templates/**/*.html", "./support/templates/**/*.html", - "./osichat/templates/**/*.html", + ], theme: { screens: {