diff --git a/inventory/management/commands/seed1.py b/inventory/management/commands/seed1.py index ee247748..229c2014 100644 --- a/inventory/management/commands/seed1.py +++ b/inventory/management/commands/seed1.py @@ -26,12 +26,13 @@ class Command(BaseCommand): dealers = Dealer.objects.all() for dealer in dealers: - self._create_random_po(dealer) - self._create_random_vendors(dealer) + # self._create_random_po(dealer) + # self._create_random_vendors(dealer) # self._create_random_staff(dealer) # self._create_random_cars(dealer) - self._create_random_customers(dealer) + # self._create_random_customers(dealer) # self._create_randome_services(dealer) + self._create_random_lead(dealer) # dealer = Dealer.objects.get(name="Dealer #6") @@ -66,7 +67,7 @@ class Command(BaseCommand): for i in range(5): name = f"{fake.name()}{i}" email = fake.email() - password = f"{fake.password()}{i}" + password = "Tenhal@123" user = User.objects.create_user(username=email, email=email, password=password) user.is_staff = True user.save() @@ -207,6 +208,8 @@ class Command(BaseCommand): first_name = fake.name() last_name = fake.last_name() email = fake.email() + phone = fake.phone_number() + address = fake.address() staff = random.choice(Staff.objects.filter(dealer=dealer)) make = random.choice(CarMake.objects.all()) @@ -216,7 +219,8 @@ class Command(BaseCommand): first_name=first_name, last_name=last_name, email=email, - address=fake.address(), + phone_number=phone, + address=address, lead_type="customer", id_car_make=make, id_car_model=model, @@ -227,16 +231,18 @@ class Command(BaseCommand): c = Customer( dealer=dealer, title="MR", - first_name=fake.name(), - last_name=fake.last_name(), + first_name=first_name, + last_name=last_name, gender="m", - email=fake.email(), - phone_number=fake.phone_number(), - address=fake.address(), + email=email, + phone_number=phone, + address=address, national_id=random.randint(1000000000, 9999999999), ) c.create_user_model() c.create_customer_model() c.save() + lead.customer = c + lead.save() except Exception as e: pass \ No newline at end of file diff --git a/inventory/models.py b/inventory/models.py index 9e43c3c1..99b67cc1 100644 --- a/inventory/models.py +++ b/inventory/models.py @@ -223,7 +223,7 @@ class CarMake(models.Model, LocalizedNameMixin): name = models.CharField(max_length=255, blank=True, null=True) slug = models.SlugField(max_length=255, unique=True, blank=True, null=True) arabic_name = models.CharField(max_length=255, blank=True, null=True) - logo = models.ImageField(_("logo"), upload_to="car_make", blank=True, null=True,default="user-logo.png") + logo = models.ImageField(_("logo"), upload_to="car_make", blank=True, null=True,default="user-logo.jpg") is_sa_import = models.BooleanField(default=False) car_type = models.SmallIntegerField(choices=CarType.choices, blank=True, null=True) @@ -593,7 +593,7 @@ class AdditionalServices(models.Model, LocalizedNameMixin): class Car(Base): - + item_model = models.OneToOneField( ItemModel, models.DO_NOTHING, @@ -1288,7 +1288,7 @@ class Staff(models.Model, LocalizedNameMixin): max_length=200, blank=True, null=True, verbose_name=_("Address") ) logo = models.ImageField( - upload_to="logos/staff", blank=True, null=True, verbose_name=_("Image"),default="user-logo.png" + upload_to="logos/staff", blank=True, null=True, verbose_name=_("Image"),default="user-logo.jpg" ) thumbnail = ImageSpecField( source="logo", @@ -1661,7 +1661,7 @@ class Organization(models.Model, LocalizedNameMixin): max_length=200, blank=True, null=True, verbose_name=_("Address") ) logo = models.ImageField( - upload_to="logos", blank=True, null=True, verbose_name=_("Logo"),default="user-logo.png" + upload_to="logos", blank=True, null=True, verbose_name=_("Logo"),default="user-logo.jpg" ) thumbnail = ImageSpecField( source="logo", @@ -2481,7 +2481,7 @@ class Vendor(models.Model, LocalizedNameMixin): email = models.EmailField(max_length=255, verbose_name=_("Email Address")) address = models.CharField(max_length=200, verbose_name=_("Address")) logo = models.ImageField( - upload_to="logos/vendors", blank=True, null=True, verbose_name=_("Logo"),default="user-logo.png" + upload_to="logos/vendors", blank=True, null=True, verbose_name=_("Logo"),default="user-logo.jpg" ) thumbnail = ImageSpecField( source="logo", diff --git a/inventory/signals.py b/inventory/signals.py index 98b124f1..9d8008cc 100644 --- a/inventory/signals.py +++ b/inventory/signals.py @@ -996,10 +996,18 @@ def car_created_notification(sender, instance, created, **kwargs): for accountant in accountants: models.Notification.objects.create( user=accountant, - message=f""" - New Car {instance.id_car_make}-{instance.id_car_model}-{instance.year}-{instance.vin} has been added to the inventory. - View - """, + message=_( + """ + New Car {car_make}-{car_model}-{year}-{vin} has been added to the inventory. + View + """ + ).format( + car_make=instance.id_car_make, + car_model=instance.id_car_model, + year=instance.year, + vin=instance.vin, + url=instance.get_absolute_url(), + ), ) @@ -1014,10 +1022,17 @@ def po_fullfilled_notification(sender, instance, created, **kwargs): for recipient in recipients: models.Notification.objects.create( user=recipient, - message=f""" - New Purchase Order has been added. - View - """, + message=_( + """ + New Purchase Order has been added. + View + """ + ).format( + url=reverse( + "purchase_order_detail", + kwargs={"dealer_slug": dealer.slug, "pk": instance.pk}, + ), + ), ) @@ -1032,9 +1047,11 @@ def vendor_created_notification(sender, instance, created, **kwargs): for recipient in recipients: models.Notification.objects.create( user=recipient, - message=f""" - New Vendor {instance.name} has been added to dealer {instance.dealer.name}. - """, + message=_( + """ + New Vendor {vendor_name} has been added to dealer {dealer_name}. + """ + ).format(vendor_name=instance.name, dealer_name=instance.dealer.name), ) @@ -1051,10 +1068,18 @@ def sale_order_created_notification(sender, instance, created, **kwargs): for recipient in recipients: models.Notification.objects.create( user=recipient, - message=f""" - New Sale Order has been added for estimate:{instance.estimate}. - View - """, + message=_( + """ + New Sale Order has been added for estimate:{estimate_number}. + View + """ + ).format( + estimate_number=instance.estimate.estimate_number, + url=reverse( + "estimate_detail", + kwargs={"dealer_slug": instance.dealer.slug, "pk": instance.estimate.pk}, + ), + ), ) @@ -1064,10 +1089,12 @@ def lead_created_notification(sender, instance, created, **kwargs): if instance.staff: models.Notification.objects.create( user=instance.staff.user, - message=f""" - New Lead has been added. - View - """, + message=_( + """ + New Lead has been added. + View + """ + ).format(url=instance.get_absolute_url()), ) @@ -1084,11 +1111,19 @@ def estimate_in_review_notification(sender, instance, created, **kwargs): for recipient in recipients: models.Notification.objects.create( user=recipient, - message=f""" - Estimate {instance.estimate_number} is in review. - Please review and approve it at your earliest convenience. - View - """, + message=_( + """ + Estimate {estimate_number} is in review. + Please review and approve it at your earliest convenience. + View + """ + ).format( + estimate_number=instance.estimate_number, + url=reverse( + "estimate_detail", + kwargs={"dealer_slug": dealer.slug, "pk": instance.pk}, + ), + ), ) @@ -1106,10 +1141,18 @@ def estimate_in_approve_notification(sender, instance, created, **kwargs): return models.Notification.objects.create( user=recipient.related_object.user, - message=f""" - Estimate {instance.estimate_number} has been approved. - View - """, + message=_( + """ + Estimate {estimate_number} has been approved. + View + """ + ).format( + estimate_number=instance.estimate_number, + url=reverse( + "estimate_detail", + kwargs={"dealer_slug": dealer.slug, "pk": instance.pk}, + ), + ), ) @@ -1127,10 +1170,18 @@ def bill_model_in_approve_notification(sender, instance, created, **kwargs): for recipient in recipients: models.Notification.objects.create( user=recipient, - message=f""" - Bill {instance.bill_number} is in review,please review and approve it - View. - """, + message=_( + """ + Bill {bill_number} is in review,please review and approve it + View. + """ + ).format( + bill_number=instance.bill_number, + url=reverse( + "bill-detail", + kwargs={"dealer_slug": dealer.slug, "entity_slug": dealer.entity.slug, "bill_pk": instance.pk}, + ), + ), ) @@ -1148,15 +1199,22 @@ def bill_model_after_approve_notification(sender, instance, created, **kwargs): for recipient in recipients: models.Notification.objects.create( user=recipient, - message=f""" - Bill {instance.bill_number} has been approved. - View. - please complete the bill payment. - """, + message=_( + """ + Bill {bill_number} has been approved. + View. + please complete the bill payment. + """ + ).format( + bill_number=instance.bill_number, + url=reverse( + "bill-detail", + kwargs={"dealer_slug": dealer.slug, "entity_slug": dealer.entity.slug, "bill_pk": instance.pk}, + ), + ), ) - def handle_upgrade(sender, order, **kwargs): logger.info(f"User {order.user} upgraded to {order.plan}") diff --git a/inventory/views.py b/inventory/views.py index 9d733272..dac11229 100644 --- a/inventory/views.py +++ b/inventory/views.py @@ -9531,7 +9531,8 @@ def mark_all_notifications_as_read(request): models.Notification.objects.filter(user=request.user, is_read=False).update( is_read=True ) - return redirect(request.META.get("HTTP_REFERER")) + messages.success(request, _("All notifications marked as read.")) + return redirect("notifications_history") @login_required diff --git a/static/images/logos/no-content-new.jpg b/static/images/logos/no-content-new.jpg index e71780d9..84e4b140 100644 Binary files a/static/images/logos/no-content-new.jpg and b/static/images/logos/no-content-new.jpg differ diff --git a/static/images/logos/no-content-new1.jpg b/static/images/logos/no-content-new1.jpg new file mode 100644 index 00000000..e71780d9 Binary files /dev/null and b/static/images/logos/no-content-new1.jpg differ diff --git a/static/images/logos/no-content-new2.jpg b/static/images/logos/no-content-new2.jpg new file mode 100644 index 00000000..0545ec71 Binary files /dev/null and b/static/images/logos/no-content-new2.jpg differ diff --git a/static/user-logo.jpg b/static/user-logo.jpg new file mode 100644 index 00000000..bb7e4923 Binary files /dev/null and b/static/user-logo.jpg differ diff --git a/templates/account/signup-wizard-copy.html b/templates/account/signup-wizard-nkp.html similarity index 50% rename from templates/account/signup-wizard-copy.html rename to templates/account/signup-wizard-nkp.html index 5c33c76e..52dac1a7 100644 --- a/templates/account/signup-wizard-copy.html +++ b/templates/account/signup-wizard-nkp.html @@ -3,7 +3,7 @@ {% load i18n static %} {% block content %} - + {% trans 'Sign Up' %} {% trans 'Create your account today' %} - + @@ -84,7 +86,7 @@ - + - {{ form1|crispy }} - {{ _("Read Terms of Service and Privacy Policy") }} + data-wizard-form="1" + data-ref-f1> + + + {% trans "Email" %} + * + + + {% trans "Please enter a valid email address" %} + + + {% trans "Password" %} + + + {% trans "Password does not match. or length is less than 8 characters." %} + + + + {% trans "Confirm Password" %} + * + + + {% trans "Password does not match. or length is less than 8 characters." %} + + - {{ form2|crispy }} + data-wizard-form="2" + data-ref-f2> + + {% trans "Name" %} + + + + {% trans "Arabic Name" %} + + + + {% trans "Phone Number" %} + * + + {% trans "Please enter a valid phone number" %} + - {{ form3|crispy }} + data-wizard-form="3" + data-ref-f3> + + {% trans "CRN" %} + + + + {% trans "VRN" %} + + + + {% trans "Address" %} + + {% trans 'anytime' %} {% trans 'anywhere' %} - {% trans 'Submit' %} + {% trans 'Submit' %} -
{% trans 'Create your account today' %}