diff --git a/.DS_Store b/.DS_Store index 8dcdf57e..61496375 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/car_inventory/__pycache__/settings.cpython-311.pyc b/car_inventory/__pycache__/settings.cpython-311.pyc index 9f00789e..acef0142 100644 Binary files a/car_inventory/__pycache__/settings.cpython-311.pyc and b/car_inventory/__pycache__/settings.cpython-311.pyc differ diff --git a/db.sqlite b/db.sqlite index f0746d7c..3a863764 100644 Binary files a/db.sqlite and b/db.sqlite differ diff --git a/inventory/__pycache__/forms.cpython-311.pyc b/inventory/__pycache__/forms.cpython-311.pyc index a182052e..ab2fc768 100644 Binary files a/inventory/__pycache__/forms.cpython-311.pyc and b/inventory/__pycache__/forms.cpython-311.pyc differ diff --git a/inventory/__pycache__/models.cpython-311.pyc b/inventory/__pycache__/models.cpython-311.pyc index 515b703e..b3a397af 100644 Binary files a/inventory/__pycache__/models.cpython-311.pyc and b/inventory/__pycache__/models.cpython-311.pyc differ diff --git a/inventory/__pycache__/services.cpython-311.pyc b/inventory/__pycache__/services.cpython-311.pyc index 4263ba3d..7c169a00 100644 Binary files a/inventory/__pycache__/services.cpython-311.pyc and b/inventory/__pycache__/services.cpython-311.pyc differ diff --git a/inventory/__pycache__/urls.cpython-311.pyc b/inventory/__pycache__/urls.cpython-311.pyc index 558253c5..feff8b2f 100644 Binary files a/inventory/__pycache__/urls.cpython-311.pyc and b/inventory/__pycache__/urls.cpython-311.pyc differ diff --git a/inventory/__pycache__/views.cpython-311.pyc b/inventory/__pycache__/views.cpython-311.pyc index bc437115..8f304fb1 100644 Binary files a/inventory/__pycache__/views.cpython-311.pyc and b/inventory/__pycache__/views.cpython-311.pyc differ diff --git a/inventory/haikalna.py b/inventory/haikalna.py index 21e82bcd..c2b48873 100644 --- a/inventory/haikalna.py +++ b/inventory/haikalna.py @@ -232,7 +232,7 @@ wmi_manufacturer_mapping = { "LJS": "Yaxing Coach", "LJU": "Lotus Geely", "LJX": "JMC Ford", - "LJ1": "Nio", + "LJ1": "JAC", "LJ8": "Zotye", "LKC": "Changhe", "LKL": "Higer Bus", @@ -317,6 +317,7 @@ wmi_manufacturer_mapping = { "LZ4": "Shangyang", "L1N": "XPeng", "L2C": "Chery", + "L3H": "Victory", "L4F": "Suzhou Eagle", "L5C": "KangDi", "L5K": "Yongkang", @@ -1524,6 +1525,7 @@ def decode_vin_haikalna(vin): 'modelYear': year, } + print(data) return data @@ -1533,4 +1535,5 @@ def decode_vin_haikalna(vin): # Example usage # vin_number = 'LMXA14AF7PZ356070' # decoded_vin = decode_vin_haikalna(vin_number) -# print(decoded_vin) \ No newline at end of file +# print(decoded_vin) +# LJ11PCBC2P1317660 \ No newline at end of file diff --git a/inventory/migrations/0002_alter_subscriptionplan_options_and_more.py b/inventory/migrations/0002_alter_subscriptionplan_options_and_more.py new file mode 100644 index 00000000..56ecc382 --- /dev/null +++ b/inventory/migrations/0002_alter_subscriptionplan_options_and_more.py @@ -0,0 +1,101 @@ +# Generated by Django 5.1.4 on 2025-01-02 23:56 + +import django.db.models.deletion +import django.utils.timezone +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('inventory', '0001_initial'), + ] + + operations = [ + migrations.AlterModelOptions( + name='subscriptionplan', + options={'verbose_name': 'Subscription Plan', 'verbose_name_plural': 'Subscription Plans'}, + ), + migrations.RemoveField( + model_name='subscription', + name='max_users', + ), + migrations.AddField( + model_name='opportunity', + name='assigned_at', + field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now, verbose_name='Assigned At'), + preserve_default=False, + ), + migrations.AddField( + model_name='opportunity', + name='assigned_to', + field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='deals_assigned', to='inventory.staff'), + preserve_default=False, + ), + migrations.AddField( + model_name='subscription', + name='billing_cycle', + field=models.CharField(choices=[('monthly', 'Monthly'), ('annual', 'Annual')], default='monthly', help_text='Billing cycle for the subscription', max_length=10), + ), + migrations.AddField( + model_name='subscription', + name='last_payment_date', + field=models.DateField(blank=True, help_text='Date of the last payment made', null=True), + ), + migrations.AddField( + model_name='subscription', + name='next_payment_date', + field=models.DateField(blank=True, help_text='Date of the next payment due', null=True), + ), + migrations.AddField( + model_name='subscriptionplan', + name='created_at', + field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now), + preserve_default=False, + ), + migrations.AddField( + model_name='subscriptionplan', + name='custom_features', + field=models.JSONField(blank=True, help_text='Additional features specific to this plan', null=True), + ), + migrations.AddField( + model_name='subscriptionplan', + name='max_inventory_size', + field=models.PositiveIntegerField(default=50, help_text='Maximum number of cars in inventory'), + ), + migrations.AddField( + model_name='subscriptionplan', + name='support_level', + field=models.CharField(choices=[('basic', 'Basic Support'), ('priority', 'Priority Support'), ('dedicated', 'Dedicated Support')], default='basic', help_text='Level of support provided', max_length=50), + ), + migrations.AddField( + model_name='subscriptionplan', + name='updated_at', + field=models.DateTimeField(auto_now=True), + ), + migrations.AlterField( + model_name='subscription', + name='end_date', + field=models.DateField(help_text='Date when the subscription ends'), + ), + migrations.AlterField( + model_name='subscription', + name='plan', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='subscriptions', to='inventory.subscriptionplan'), + ), + migrations.AlterField( + model_name='subscription', + name='start_date', + field=models.DateField(help_text='Date when the subscription starts'), + ), + migrations.AlterField( + model_name='subscriptionplan', + name='max_users', + field=models.PositiveIntegerField(default=1, help_text='Maximum number of users allowed'), + ), + migrations.AlterField( + model_name='subscriptionplan', + name='name', + field=models.CharField(help_text='Name of the subscription plan', max_length=100, unique=True), + ), + ] diff --git a/inventory/migrations/0022_remove_opportunitylog_user_opportunitylog_staff_and_more.py b/inventory/migrations/0022_remove_opportunitylog_user_opportunitylog_staff_and_more.py deleted file mode 100644 index 9c3caa2b..00000000 --- a/inventory/migrations/0022_remove_opportunitylog_user_opportunitylog_staff_and_more.py +++ /dev/null @@ -1,34 +0,0 @@ -# Generated by Django 5.1.4 on 2025-01-01 16:25 - -import django.db.models.deletion -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('django_ledger', '0017_alter_accountmodel_unique_together_and_more'), - ('inventory', '0021_opportunitylog'), - ] - - operations = [ - migrations.RemoveField( - model_name='opportunitylog', - name='user', - ), - migrations.AddField( - model_name='opportunitylog', - name='staff', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='inventory.staff', verbose_name='Staff'), - ), - migrations.AlterField( - model_name='carfinance', - name='additional_services', - field=models.ManyToManyField(blank=True, related_name='additional_finances', to='django_ledger.itemmodel'), - ), - migrations.AlterField( - model_name='customer', - name='is_lead', - field=models.BooleanField(default=False, verbose_name='Is Lead'), - ), - ] diff --git a/inventory/models.py b/inventory/models.py index 899d21fa..d69807bd 100644 --- a/inventory/models.py +++ b/inventory/models.py @@ -502,28 +502,64 @@ class TimestampedModel(models.Model): class Subscription(models.Model): - plan = models.CharField(max_length=255) # e.g. "basic", "premium" - start_date = models.DateField() - end_date = models.DateField() - max_users = models.IntegerField() # maximum number of users per account + plan = models.ForeignKey("SubscriptionPlan", on_delete=models.CASCADE, related_name="subscriptions") + start_date = models.DateField(help_text="Date when the subscription starts") + end_date = models.DateField(help_text="Date when the subscription ends") users = models.ManyToManyField(User, through='SubscriptionUser') # many-to-many relationship with User model is_active = models.BooleanField(default=True) + billing_cycle = models.CharField( + max_length=10, + choices=[('monthly', 'Monthly'), ('annual', 'Annual')], + default='monthly', + help_text="Billing cycle for the subscription" + ) + last_payment_date = models.DateField(null=True, blank=True, help_text="Date of the last payment made") + next_payment_date = models.DateField(null=True, blank=True, help_text="Date of the next payment due") + class Meta: + verbose_name = _("Subscription") + verbose_name_plural = _("Subscriptions") + def __str__(self): - return self.plan + return self.plan.name + + @property + def total_subscribers(self): + return self.users.count() + class SubscriptionUser(models.Model): subscription = models.ForeignKey(Subscription, on_delete=models.CASCADE) user = models.ForeignKey(User, on_delete=models.CASCADE) + + class Meta: + verbose_name = _("Subscription User") + verbose_name_plural = _("Subscription Users") + def __str__(self): return f"{self.subscription} - {self.user}" class SubscriptionPlan(models.Model): - name = models.CharField(max_length=255) + name = models.CharField(max_length=100, unique=True, help_text=_("Name of the subscription plan")) description = models.TextField() price = models.DecimalField(max_digits=10, decimal_places=2) - max_users = models.IntegerField() # maximum number of users per account + max_users = models.PositiveIntegerField(help_text=_("Maximum number of users allowed"), default=1) + max_inventory_size = models.PositiveIntegerField(help_text=_("Maximum number of cars in inventory"), default=50) + support_level = models.CharField( + max_length=50, + choices=[('basic', 'Basic Support'), ('priority', 'Priority Support'), ('dedicated', 'Dedicated Support')], + default='basic', + help_text="Level of support provided" + ) + custom_features = models.JSONField(blank=True, null=True, help_text=_("Additional features specific to this plan")) + created_at = models.DateTimeField(auto_now_add=True) + updated_at = models.DateTimeField(auto_now=True) + + class Meta: + verbose_name = _("Subscription Plan") + verbose_name_plural = _("Subscription Plans") + def __str__(self): return f"{self.name} - {self.price}" @@ -731,6 +767,8 @@ class Opportunity(models.Model): created_by = models.ForeignKey(Staff, on_delete=models.SET_NULL, null=True, related_name="deals_created") created_at = models.DateTimeField(auto_now_add=True, verbose_name=_("Created At")) updated_at = models.DateTimeField(auto_now=True, verbose_name=_("Updated At")) + assigned_to = models.ForeignKey(Staff, on_delete=models.CASCADE, related_name="deals_assigned") + assigned_at = models.DateTimeField(auto_now_add=True, verbose_name=_("Assigned At")) class Meta: verbose_name = _("Opportunity") @@ -746,6 +784,7 @@ class Notes(models.Model): created_by = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, related_name="notes_created") created_at = models.DateTimeField(auto_now_add=True, verbose_name=_("Created At")) updated_at = models.DateTimeField(auto_now=True, verbose_name=_("Updated At")) + class Meta: verbose_name = _("Notes") verbose_name_plural = _("Notes") @@ -1052,4 +1091,6 @@ class UserActivityLog(models.Model): ordering = ['-timestamp'] def __str__(self): - return f"{self.user.email} - {self.action} - {self.timestamp}" \ No newline at end of file + return f"{self.user.email} - {self.action} - {self.timestamp}" + + diff --git a/inventory/services.py b/inventory/services.py index df12bf59..cc782106 100644 --- a/inventory/services.py +++ b/inventory/services.py @@ -53,7 +53,7 @@ def decode_vin(vin): "model": v.Model, "modelYear": v.ModelYear, } - + print(data) return data if all([x for x in data.values()]) else None @@ -78,7 +78,7 @@ def elm(vin): "model": response["data"]["model"], "modelYear": response["data"]["modelYear"], } - + print(data) return data if all([x for x in data.values()]) else None diff --git a/inventory/signals.py b/inventory/signals.py index 0c419b9e..6dcafbbe 100644 --- a/inventory/signals.py +++ b/inventory/signals.py @@ -105,7 +105,7 @@ def create_ledger_entity(sender, instance, created, **kwargs): # Create Cash Account entity.create_account( coa_model=coa, - code="101", + code="1101", role=roles.ASSET_CA_CASH, name=_("Cash"), balance_type="debit", @@ -115,7 +115,7 @@ def create_ledger_entity(sender, instance, created, **kwargs): # Create Accounts Receivable Account entity.create_account( coa_model=coa, - code="102", + code="1102", role=roles.ASSET_CA_RECEIVABLES, name=_("Accounts Receivable"), balance_type="debit", @@ -125,7 +125,7 @@ def create_ledger_entity(sender, instance, created, **kwargs): # Create Inventory Account entity.create_account( coa_model=coa, - code="103", + code="1103", role=roles.ASSET_CA_INVENTORY, name=_("Inventory"), balance_type="debit", @@ -135,7 +135,7 @@ def create_ledger_entity(sender, instance, created, **kwargs): # Create Accounts Payable Account entity.create_account( coa_model=coa, - code="101", + code="2101", role=roles.LIABILITY_CL_ACC_PAYABLE, name=_("Accounts Payable"), balance_type="credit", @@ -144,7 +144,7 @@ def create_ledger_entity(sender, instance, created, **kwargs): # Create Equity Account entity.create_account( coa_model=coa, - code="101", + code="3101", role=roles.EQUITY_CAPITAL, name=_("Partners Current"), balance_type="credit", @@ -154,7 +154,7 @@ def create_ledger_entity(sender, instance, created, **kwargs): # Create Sales Revenue Account entity.create_account( coa_model=coa, - code="101", + code="4101", role=roles.INCOME_OPERATIONAL, name=_("Sales Revenue"), balance_type="credit", @@ -164,7 +164,7 @@ def create_ledger_entity(sender, instance, created, **kwargs): # Create Cost of Goods Sold Account entity.create_account( coa_model=coa, - code="101", + code="5101", role=roles.COGS, name=_("Cost of Goods Sold"), balance_type="debit", @@ -174,7 +174,7 @@ def create_ledger_entity(sender, instance, created, **kwargs): # Create Rent Expense Account entity.create_account( coa_model=coa, - code="101", + code="6101", role=roles.EXPENSE_OPERATIONAL, name=_("Rent Expense"), balance_type="debit", diff --git a/inventory/urls.py b/inventory/urls.py index 39917767..b87a0c53 100644 --- a/inventory/urls.py +++ b/inventory/urls.py @@ -90,7 +90,7 @@ urlpatterns = [ path('sales/quotations//mark_quotation/', views.mark_quotation, name='mark_quotation'), path('sales/quotations//post_quotation/', views.post_quotation, name='post_quotation'), path('sales/quotations//invoice_detail/', views.invoice_detail, name='invoice_detail'), - + path('subscriptions', views.SubscriptionPlans.as_view(), name='subscriptions'), #Payment URLs # path('sales/quotations//payment/', views.PaymentCreateView.as_view(), name='payment_create'), path('sales/quotations//payment/', views.payment_create, name='payment_create'), diff --git a/inventory/views.py b/inventory/views.py index 5e25f3ea..46cb1cde 100644 --- a/inventory/views.py +++ b/inventory/views.py @@ -1468,14 +1468,14 @@ def payment_invoice(request, pk): def payment_create(request, pk): quotation = get_object_or_404(models.SaleQuotation, pk=pk) - dealer = request.user.dealer + dealer = get_user_type(request) if request.method == "POST": form = forms.PaymentForm(request.POST) if form.is_valid(): form.instance.quotation = quotation insatnce = form.save() - dealer = request.user.dealer + dealer = dealer entity = dealer.entity customer = ( entity.get_customers() @@ -2359,3 +2359,9 @@ class ItemServiceListView(ListView): def get_queryset(self): return self.request.entity.get_items_services() + + +class SubscriptionPlans(ListView): + model = models.SubscriptionPlan + template_name = 'subscriptions/subscription_plan.html' + context_object_name = 'plans' diff --git a/static/.DS_Store b/static/.DS_Store index 2b2bcc1b..c6753b28 100644 Binary files a/static/.DS_Store and b/static/.DS_Store differ diff --git a/static/css/custom.css b/static/css/custom.css index 48e742af..60d60233 100644 --- a/static/css/custom.css +++ b/static/css/custom.css @@ -1,8 +1,9 @@ .color-div { - width: 22px; - height: 22px; - border-radius: 50%; - border: 1px solid #ccc; + width: 64px; + height: 16px; + padding: 2px 4px; + border-radius: 1px; + border: 1px outset #CBD0DDFd; text-align: center; vertical-align: middle; line-height: 22px; diff --git a/static/images/.DS_Store b/static/images/.DS_Store index e77671d4..23a16b17 100644 Binary files a/static/images/.DS_Store and b/static/images/.DS_Store differ diff --git a/static/images/car_make/Dongfeng.png b/static/images/car_make/Dongfeng.png new file mode 100644 index 00000000..6b22550d Binary files /dev/null and b/static/images/car_make/Dongfeng.png differ diff --git a/static/images/car_make/Forthing.png b/static/images/car_make/Forthing.png new file mode 100644 index 00000000..474a02a3 Binary files /dev/null and b/static/images/car_make/Forthing.png differ diff --git a/static/images/logos/.DS_Store b/static/images/logos/.DS_Store index 2524cbab..72155161 100644 Binary files a/static/images/logos/.DS_Store and b/static/images/logos/.DS_Store differ diff --git a/static/images/logos/car_make/Dongfeng.png b/static/images/logos/car_make/Dongfeng.png new file mode 100644 index 00000000..6b22550d Binary files /dev/null and b/static/images/logos/car_make/Dongfeng.png differ diff --git a/static/images/logos/car_make/Forthing.png b/static/images/logos/car_make/Forthing.png new file mode 100644 index 00000000..474a02a3 Binary files /dev/null and b/static/images/logos/car_make/Forthing.png differ diff --git a/static/images/logos/car_make/changan.png b/static/images/logos/car_make/changan.png new file mode 100644 index 00000000..5761674e Binary files /dev/null and b/static/images/logos/car_make/changan.png differ diff --git a/static/images/logos/car_make/haval.png b/static/images/logos/car_make/haval.png new file mode 100644 index 00000000..c1131c1d Binary files /dev/null and b/static/images/logos/car_make/haval.png differ diff --git a/templates/base.html b/templates/base.html index 9867aaec..09e02ee4 100644 --- a/templates/base.html +++ b/templates/base.html @@ -30,6 +30,7 @@ + {% if LANGUAGE_CODE == 'en' %} @@ -80,6 +81,7 @@ + - - +
- - -
-

{{ cars.first.id_car_make.get_local_name }}{{ cars.first.id_car_model.get_local_name }}

+
+
+
+
+ +
+
+
+

{{ cars.first.id_car_make.get_local_name }}{{ cars.first.id_car_model.get_local_name }}

{{ cars.first.id_car_serie.name }}, {{ cars.first.id_car_trim.name }}

+
+
@@ -54,9 +64,9 @@ {% if car.stock_type == "new" %} - {{_("New")}} + {{_("New")}} {% elif car.status == "used" %} - {{_("Used")}} + {{_("Used")}} {% endif %} {{ car.vin }} @@ -64,12 +74,12 @@ {% if car.colors.exists %}
- {{ car.colors.first.exterior.get_local_name }} + {{ car.colors.first.exterior.get_local_name }}
- {{ car.colors.first.interior.get_local_name }} + {{ car.colors.first.interior.get_local_name }}
{% else %} diff --git a/templates/partials/car_card.html b/templates/partials/car_card.html deleted file mode 100644 index ce56d13d..00000000 --- a/templates/partials/car_card.html +++ /dev/null @@ -1 +0,0 @@ -{% load static %} diff --git a/templates/subscriptions/subscription_plan.html b/templates/subscriptions/subscription_plan.html new file mode 100644 index 00000000..94a06843 --- /dev/null +++ b/templates/subscriptions/subscription_plan.html @@ -0,0 +1,146 @@ +{% extends 'base.html' %} +{% load i18n %} +{% load static %} + +{% block content %} +
+

Pricing

+
+
+
+
+
+
+ {% for plan in plans %} +
+
+ +
+ +
+
+
+
+
+
+
+
+
+

{{ plan.name }}

+
+

For individuals who are interested +
in giving it a shot first. +

+
+

{{ plan.price|floatformat }} {% trans 'SAR' %}

+
{{ _("Per month")}}
+
+
+ + +
+
+
+
+
    +
  • + + {{ _("Max Users")}}: {{ plan.max_users }} +
  • +
  • + + {{ _("Inventory Size")}}: {{ plan.max_inventory_size }} +
  • +
+
+
+
+
+
+
+
+
+ {% endfor %} +
+
+
+ +
+
+
+ +
+
+
+
+

Included in our all packages

+
+
+
+

Timeline

+
+
+
+
+ +

Advanced Search

+
+
+
+
+ +

Custom fields

+ New +
+
+
+
+ +

Task dependencies

+
+
+
+
+ +

20TB of additional space

+
+
+
+
+ +

Bandwidth of Upto 1 Gbps

+
+
+
+
+ +

Private teams & projects

+
+
+
+
+ +

Customer Support and Training

+
+
+
+
+
+
+{% endblock content %} \ No newline at end of file diff --git a/templates/test.html b/templates/test.html index c2ac6a20..109f9da3 100644 --- a/templates/test.html +++ b/templates/test.html @@ -1,137 +1,538 @@ - - - - - - Car Inventory - - - - - - - - -
-

Car Inventory

- - -
-
-
- - -
-
-
- -
-
- -
+
+

All Brands

+ diff --git a/templates/welcome.html b/templates/welcome.html index 5cb5b2fc..8f3d30ac 100644 --- a/templates/welcome.html +++ b/templates/welcome.html @@ -15,8 +15,6 @@ {% block title %}{% trans 'HAIKAL' %}{% endblock %} - - @@ -34,7 +32,9 @@ - + @@ -50,188 +50,100 @@ - - -
- -
@@ -241,26 +153,31 @@
-
hero-headerhero-header
+
hero-header + hero-header +
-
hero-header
-
hero-headerhero-header
+
+ hero-header
+
+ hero-header + hero-header

Elegancefor
your web app

-

Standard, modern and Elegant solution for your next web app so you don’t have to look further. Sign up or check the demo below.

Sign upCheck Demo +

Standard, modern and Elegant solution for your next web app so you don’t have to look further. Sign up or check the demo below.

+ Sign up + Check Demo +
- - -
@@ -294,14 +211,7 @@
- - - - - - -
@@ -309,54 +219,108 @@

Features

-

Seamless Payments: A Fully
Integrated Suite

-

With the power of Phoenix, you can now focus only on functionaries for your digital products, while leaving the UI design on us!With the power of Phoenix, you can now focus only on functionaries for your digital products, while leaving the UI design on us!

Find out more +

Seamless Payments: A Fully +
Integrated Suite

+

With the power of Phoenix, you can now focus only on functionaries + for your digital products, while leaving the UI design on us!With the power + of Phoenix, you can now focus only on functionaries for your digital products, + while leaving the UI design on us!

+ Find out more +
-
+
+
Lightning Speed
-

Present everything you need in one place within minutes! Grow with Phoenix!

+

Present everything you need within minutes! Grow with Phoenix!

- +
-
+
+
All-in-one solution

Show your production and growth graph in one place with Phoenix!

- +
-
+
+ + +
SIGNAL
-

Recieve the signals instantly

-

Phoenix makes it possible for you to quickly and effectively receive every signal. No need for drawn-out waiting.

Check Demo +

Receive the signals instantly

+

Phoenix makes it possible for you to quickly and effectively receive every signal. No need for drawn-out waiting.

+ Check Demo + +
-
+
+ + +
REVENUE

See Your Revenue Grow

-

Grow with Phoenix. We help you with everything you might need., We make it easy and keep it simple.

Check Demo +

Grow with Phoenix. We help you with everything you might need., We make it easy and keep it simple.

+ Check Demo + +
-
+
+ + +
REPORTS

Get Reports Ready

-

With Phoenix, you can get ready reports on your growth analysis anytime. This dashboard also has all filters accessible according to your needs.

Check Demo +

With Phoenix, you can get ready reports on your growth anytime.

+ Check Demo +
@@ -364,912 +328,32 @@
- - - -
-
-
- - -
-
- - -
- - - -
-
-
-
-
-

Testimonial

-

More than 2 Millions happy
Customers and counting

-

You may now concentrate on the functionality and other
aspects of your web products thanks to Phoenix's strength
before leaving the UI design to us. It is simple to complete
the work after checking and double-checking.

-
-
- -
-
-
-
-
- - -
+
- - -
+
- - - - - -
-
-
-
-
-

Being used by millions of users

-

WORLDWIDE

-
-
-

You can get all the reports, data analysis, and growth maps you need with the help of Phoenix's power, and you may review and modify them whenever you want. These features make this dashboard outstanding.

-
-
-
-
-
-
-

0 +

-

Every month, there are more
than 125+ sales.

-
-
-

0

-

We have 308+ active paid.
subscribers.

-
-
-

0

-

We have won 12 awards so
far with great success.

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

Gallery

-

Some of Our Best Works

-
-

Rise like Phoenix focusing only on functionalities for your digital products leaving the design for us. Show what you do, with our latest admin dashboard. Check our best works and let us know what you want to find. Want to tell your customers about the details of how and what? Tell them with all the posts at one place without them ridirecting to another page or site.

- - -
-
-
+
- -
- -
-
-

Pricing

-

Choose the best deal for you

-
-

Entice your customers with Phoenix admin dashboard. Show your best deal in this section to help customers choose from your best offers and place them all in one place with this efficient template. If you are availing more than one offer to your customers, let them compare among them and search for what they need to get. Show offer details here and entice them to buy.

-
-
-
-
-
-
-

Starter

-
-
-

$6USD

-
- -
-
-
    -
  • Timeline -
  • -
  • Advanced Search -
  • -
  • Custom fieldsNew -
  • -
  • Task dependencies -
  • -
  • Private teams & projects -
  • -
-
-
-
-
-
-
-

Most popular

-
-
-
-
-

Team

-
-
-

$12USD

-
- -
-
-
    -
  • Timeline -
  • -
  • Advanced Search -
  • -
  • Custom fieldsNew -
  • -
  • Task dependencies -
  • -
  • Private teams & projects -
  • -
-
-
-
-
-
-
-
-
-

Business

-
-
-

$23USD

-
- -
-
-
    -
  • Timeline -
  • -
  • Advanced Search -
  • -
  • Custom fieldsNew -
  • -
  • Task dependencies -
  • -
  • Private teams & projects -
  • -
-
-
-
-
-
-
-
-
-
-
-

Enterprise

-
-
-

$40USD

-
- -
-
-
    -
  • Timeline -
  • -
  • Advanced Search -
  • -
  • Custom fieldsNew -
  • -
  • Task dependencies -
  • -
  • Private teams & projects -
  • -
-
-
-
-
-
-
-

For Enterprise Solution with Managed SMTP, Custom API setup, Dedicated Support, and more - Contact us

-
-
+ {% block pricing %} + + {% endblock pricing%}
- - - -
- -
-
-

Blog

-

Latest articles

-
-

See the latest articles we published with this dashboard. Your customers will be happy to find all the latest posts in one place. This menu efficiently shows all related topics from search filters and provides the customers with what they need. Also you can just educate your customers about everything they need to know and follow to avail a service with you. This menu is the one to show them that.

-
-
-
... -
-
- - - -
SEO -

Top 10 ways to Ace SEO for your business

Read more -
-
-
-
-
... -
-
- - - -
Marketing -

Top 12 Marketing strategies you can take

Read more -
-
-
-
-
... -
-
- - - -
Marketing -

The top 7 methods to improve as a marketer

Read more -
-
-
-
-
... -
-
- - - -
Tech -

Best places for a tech job in U.S

Read more -
-
-
-
- -
- - -
- - - - - - - - -
- -
-
-

Address

-

If you need to find us:

-
-

Do not lose your potential customers to others. Tell them exactly where you are with Geolocation enabled Phoenix admin dashboard, No need to take the burden of communicating directly. You can easily tell your customers where to find you with precise location map. Getting closer was never easier!

-
-
-
-
-
-
-
-
-
-

Stay connected

-

Stay connected with Phoenix's Help Center; Phoenix is available for your necessities at all times.

- -
-
-

Drop us a line

-

If you have any query or suggestion , we are open to learn from you, Lets talk, reach us anytime.

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

Team

-

Our small team behind our success

-
-

We have a small but strong development team to follow up on the development process. Reach out to us for further information. The team is ready to answer all your questions within minutes. The efficient team is always at your beck and call.

-
-
-
-
-
-
- - ... -
-

John Smith

-
CEO, Global Cheat
-
-
-
-
-
-
-
- - ... -
-

Marc Chiasson

-
Vice President
-
-
-
-
-
-
-
- - ... -
-

Lilah Lola

-
Marketing Manager
-
-
-
-
-
-
-
- - ... -
-

Thomas Doe

-
UX Designer
-
-
-
-
-
-
-
- - ... -
-

Alan Casey

-
Front End Developer
-
-
-
-
-
-
-
- - ... -
-

Narokin Hijita

-
CEO, Global Cheat
-
-
-
-
-
-
-
- - ... -
-

Narokin Hijita

-
CEO, Global Cheat
-
-
-
-
-
-
-
- - ... -
-

Narokin Hijita

-
CEO, Global Cheat
-
-
-
-
-
- - - - -
- -
-
-
-
-
-
- - -
...... -
-

2008 Premium Icons

-

Included FREE with it

-
-

JoinPhoenixToday

-
-
- - -
-

Best support in the world, Only Phoenix can ensure

-
-
-
-
-
- - -
- - - - -
- - - -
-
- - -
-
- - -
- - - - - - - - - - - - -
-
-
-
-
- - - -
-
- -
- - - - -
-
-
-
-
Theme Customizer
-

Explore different styles according to your preferences

-
- -
- -
-
-
-
Color Scheme
-
-
- - -
-
- - -
-
- - -
-
-
-
-
-
RTL
-
- -
-
-

Change text direction

-
-
-
-
Support Chat
-
- -
-
-

Toggle support chat

-
-
-
Navigation Type
-
-
- - -
-
- - -
-
- - -
-
- - -
-
-

You can't update navigation type in this page

-
-
-
Vertical Navbar Appearance
-
-
- - -
-
- - -
-
-

You can't update vertical navbar appearance in this page

-
-
-
Horizontal Navbar Shape
-
-
- - -
-
- - -
-
-

You can't update horizontal navbar shape in this page

-
-
-
Horizontal Navbar Appearance
-
-
- - -
-
- - -
-
-

You can't update horizontal navbar appearance in this page

-
Purchase template -
-
-
-
-
- - -
-
customize -
-
- - - - -