This commit is contained in:
Marwan Alwali 2025-01-20 15:57:32 +03:00
parent feeb882ee5
commit e7ca9d4de3
15 changed files with 139 additions and 166 deletions

View File

@ -23,6 +23,7 @@ urlpatterns += i18n_patterns(
path('', include('inventory.urls')),
path('ledger/', include('django_ledger.urls', namespace='django_ledger')),
path("haikalbot/", include("haikalbot.urls")),
path('appointment/', include('appointment.urls')),
)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

View File

@ -3,25 +3,25 @@ aiohttp==3.11.11
aiohttp-retry==2.8.3
aiosignal==1.3.2
alabaster==1.0.0
albucore==0.0.13
albumentations==1.4.10
albucore==0.0.23
albumentations==2.0.0
annotated-types==0.7.0
anyio==4.6.2.post1
anyio==4.8.0
arabic-reshaper==3.0.0
asgiref==3.8.1
astor==0.8.1
astroid==3.3.5
astroid==3.3.8
attrs==23.2.0
autopep8==2.3.1
babel==2.16.0
autopep8==2.3.2
Babel==2.15.0
beautifulsoup4==4.12.3
bleach==6.2.0
blinker==1.9.0
Brotli==1.1.0
certifi==2024.8.30
certifi==2024.12.14
cffi==1.17.1
chardet==5.2.0
charset-normalizer==3.4.0
charset-normalizer==3.4.1
click==8.1.8
colorama==0.4.6
commonmark==0.9.1
@ -29,128 +29,140 @@ contourpy==1.3.1
crispy-bootstrap5==2024.10
cryptography==44.0.0
cssselect2==0.7.0
ctranslate2==4.5.0
cycler==0.12.1
Cython==3.0.11
decorator==5.1.1
desert==2020.11.18
dill==0.3.9
distro==1.9.0
dj-rest-auth==7.0.0
dj-rest-auth==7.0.1
dj-shop-cart==7.1.1
Django==5.1.4
django-allauth==65.3.0
Django==5.1.5
django-allauth==65.3.1
django-appointment==3.7.4
django-autoslug==1.9.9
django-bootstrap5==24.3
django-classy-tags==4.1.0
django-cors-headers==4.6.0
django-countries==7.6.1
django-crispy-forms==2.3
django-debug-toolbar==4.4.6
django-debug-toolbar==5.0.1
django-extensions==3.2.3
django-filter==24.3
django-formtools==2.5.1
django-ledger==0.7.0
django-ledger==0.7.3
django-money==3.5.3
django-nine==0.2.7
django-nonefield==0.4
django-phonenumber-field==8.0.0
django-picklefield==3.2
django-prometheus==2.3.1
django-q2==1.7.6
django-sekizai==4.1.0
django-silk==5.3.1
django-silk==5.3.2
django-sms==0.7.0
django-sslserver==0.22
django-tables2==2.7.0
django-tables2==2.7.5
django-treebeard==4.7.1
django-view-breadcrumbs==2.5.1
djangocms-admin-style==3.3.1
djangorestframework==3.15.2
djangorestframework-simplejwt==5.3.1
djangorestframework_simplejwt==5.4.0
djangoviz==0.1.1
docutils==0.21.2
easy-thumbnails==2.10
et_xmlfile==2.0.0
Faker==33.1.0
Faker==33.3.1
filelock==3.16.1
fire==0.7.0
Flask==3.1.0
fonttools==4.55.3
frozenlist==1.5.0
fsspec==2024.12.0
gprof2dot==2024.6.6
graphqlclient==0.2.4
greenlet==3.1.1
h11==0.14.0
h2==4.1.0
hpack==4.0.0
hstspreload==2025.1.1
httpcore==1.0.7
httpx==0.28.0
httpx==0.28.1
hyperframe==6.0.1
idna==3.10
imageio==2.36.1
imageio==2.37.0
imagesize==1.4.1
imgaug==0.4.0
iso4217==1.12.20240625
isodate==0.7.2
isort==5.13.2
itsdangerous==2.2.0
Jinja2==3.1.4
jiter==0.8.0
Jinja2==3.1.5
jiter==0.8.2
joblib==1.4.2
kiwisolver==1.4.8
lazy_loader==0.4
ledger==1.0.1
libretranslatepy==2.1.4
lmdb==1.6.2
lxml==5.3.0
Markdown==3.7
markdown-it-py==3.0.0
MarkupSafe==3.0.2
marshmallow==3.23.2
marshmallow==3.25.1
matplotlib==3.10.0
mccabe==0.7.0
mdurl==0.1.2
MouseInfo==0.1.3
mpmath==1.3.0
multidict==6.1.0
mypy-extensions==1.0.0
networkx==3.4.2
newrelic==10.3.1
newrelic==10.4.0
nltk==3.9.1
numpy==1.26.4
libquadmath==2.2.2
oauthlib==3.2.2
ofxtools==0.9.5
openai==1.56.2
opencv-contrib-python==4.10.0.84
opencv-python==4.10.0.84
opencv-python-headless==4.10.0.84
openai==1.59.8
opencv-contrib-python==4.11.0.86
opencv-python==4.11.0.86
opencv-python-headless==4.11.0.86
openpyxl==3.1.5
opt-einsum==3.3.0
opt_einsum==3.4.0
outcome==1.3.0.post0
packaging==24.2
pandas==2.2.3
pango==0.0.1
pdfkit==1.0.0
phonenumbers==8.13.51
pillow==11.0.0
phonenumbers==8.13.53
pillow==11.1.0
platformdirs==4.3.6
prometheus_client==0.21.1
propcache==0.2.1
protobuf==5.29.3
psycopg==3.2.3
psycopg-binary==3.2.3
psycopg-c==3.2.3
psycopg==3.2.4
psycopg-binary==3.2.4
psycopg-c==3.2.4
py-moneyed==3.0
PyAutoGUI==0.9.54
pyclipper==1.3.0.post6
pycodestyle==2.12.1
pycparser==2.22
pydantic==2.10.3
pydantic_core==2.27.1
pydantic==2.10.5
pydantic_core==2.27.2
pydotplus==2.0.2
pydyf==0.11.0
PyGetWindow==0.0.9
Pygments==2.18.0
Pygments==2.19.1
PyJWT==2.10.1
pylint==3.3.2
pylint==3.3.3
PyMsgBox==1.0.9
PyMySQL==1.1.1
pyobjc-core==10.3.2
pyobjc-framework-Cocoa==10.3.2
pyobjc-framework-Quartz==10.3.2
pyparsing==3.2.0
pyobjc-core==11.0
pyobjc-framework-Cocoa==11.0
pyobjc-framework-Quartz==11.0
pyparsing==3.2.1
pyperclip==1.9.0
pyphen==0.17.0
pypng==0.20220715.0
@ -166,30 +178,36 @@ python3-saml==1.16.0
pytweening==1.2.0
pytz==2024.2
pyvin==0.0.2
pywa==2.4.0
pywa==2.7.0
pywhat==5.1.0
pywhatkit==5.4
PyYAML==6.0.2
pyzbar==0.1.9
qrcode==8.0
RapidFuzz==3.11.0
regex==2024.11.6
reportlab==4.2.5
requests==2.32.3
requests-oauthlib==2.0.0
rfc3986==2.0.0
rich==13.9.4
rubicon-objc==0.4.9
rubicon-objc==0.5.0
sacremoses==0.1.1
scikit-image==0.25.0
scikit-learn==1.6.0
scipy==1.14.1
libomp runtime library==1.6.1
libquadmath==1.15.1
selenium==4.27.1
sentencepiece==0.2.0
shapely==2.0.6
six==1.16.0
six==1.17.0
sniffio==1.3.1
snowballstemmer==2.2.0
sortedcontainers==2.4.0
soupsieve==2.6
SQLAlchemy==2.0.36
sqlparse==0.5.2
SQLAlchemy==2.0.37
sqlparse==0.5.3
stanza==1.10.1
sympy==1.13.1
tablib==3.7.0
termcolor==2.5.0
threadpoolctl==3.5.0
@ -198,16 +216,17 @@ tinycss2==1.4.0
tinyhtml5==2.0.0
tomli==2.2.1
tomlkit==0.13.2
torch==2.5.1
tqdm==4.67.1
trio==0.28.0
trio-websocket==0.11.1
twilio==9.4.1
twilio==9.4.3
typing-inspect==0.9.0
typing_extensions==4.12.2
tzdata==2024.2
Unidecode==1.3.8
upgrade-requirements==1.7.0
urllib3==2.2.3
urllib3==2.3.0
vin==0.6.2
vininfo==1.8.0
vishap==0.1.5

View File

@ -6,9 +6,7 @@
height: auto;
margin: 0 auto;
}
</style>
{% include 'partials/form_errors.html' %}
<!-- JavaScript Section -->
<script src="https://unpkg.com/@zxing/library@latest"></script>
@ -17,12 +15,13 @@
<div class="row g-3">
<form method="post" id="carForm" class="form needs-validation" novalidate>
{% csrf_token %}
{% include 'partials/form_errors.html' %}
<div class="d-flex flex-column min-vh-100">
<div class="d-flex flex-column flex-sm-grow-1 p-4">
<main class="d-grid gap-4 p-1">
<div class="row g-4">
<h3 class="mb-3">{% trans 'Add Car' %}</h3>
<h3 class="mb-3">{% trans 'Add Car' %}</h3>
<!-- VIN -->
<div class="col-lg-4 col-xl-6">
<div class="card h-100">
@ -32,7 +31,7 @@
<div class="form-floating">
<input type="text"
class="form-control"
id="{{ form.vin.id_for_label }}" name="{{ form.vin.html_name }}" />
id="{{ form.vin.id_for_label }}" name="{{ form.vin.html_name }}" required/>
<label for="{{ form.vin.id_for_label }}">{% trans 'VIN' %}</label>
</div>
</div>
@ -61,7 +60,6 @@
</div>
</div>
<div id="serie-row" class="col-6">
<div class="form-floating">
<select class="form-select form-select-sm"
id="{{ form.id_car_serie.id_for_label }}"
@ -82,18 +80,15 @@
</div>
<div class="col-6" id="trim-row">
<div class="form-floating">
<select class="form-select form-select-sm"
id="{{ form.id_car_trim.id_for_label }}"
name="{{ form.id_car_trim.html_name }}">
<option value="">{% trans 'Select' %}</option>
</select>
<label for="{{ form.id_car_trim.id_for_label }}">{% trans 'trim'|capfirst %}</label>
</div>
</div>
</div>
<div class="row my-3">
<div class="col-6" id="model-row">
<div class="form-floating">
@ -107,17 +102,16 @@
</div>
<div class="badge badge-phoenix fs-11 badge-phoenix-success m-1" id="generation-div"></div>
</div>
<div class="col-6">
<div class="btn-group btn-group-sm justify-content-between align-items-center my-2">
<div class="col-4 align-items-center">
<button type="button"
class="btn btn-sm btn-phoenix-primary rounded-start"
class="btn btn-sm btn-phoenix-success p-1"
id="specification-btn"
data-bs-toggle="modal"
data-bs-target="#specificationsModal"
disabled>{% trans 'specifications'|capfirst %}
</button>
<button type="button"
class="btn btn-sm btn-phoenix-warning rounded-end"
class="btn btn-sm btn-phoenix-warning p-1"
id="options-btn"
data-bs-toggle="modal"
data-bs-target="#equipmentOptionsModal"
@ -125,17 +119,15 @@
</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row g-3">
<div class="col-lg-4 col-xl-6">
<div class="row g-3">
<!-- Vendor Field -->
<!--Vendor Field-->
<div class="col-lg-4 col-xl-4">
<div class="card h-100">
<div class="card-body">
@ -145,15 +137,9 @@
{% trans 'Vendor' %}
</label>
</div>
{% if form.vendor.errors %}
<div class="text-danger small">
{{ form.vendor.errors|striptags }}
</div>
{% endif %}
</div>
</div>
</div>
<!-- Stock Type Card -->
<div class="col-lg-4 col-xl-4">
<div class="card h-100">
@ -164,12 +150,6 @@
{% trans 'Stock Type'|capfirst %}
</label>
</div>
{% if form.stock_type.errors %}
<div class="text-danger small">
{{ form.stock_type.errors|striptags }}
</div>
{% endif %}
</div>
</div>
</div>
@ -181,11 +161,6 @@
{{ form.mileage|add_class:"form-control form-control-sm" }}
<label for="{{ form.mileage.id_for_label }}">{% trans 'Mileage'|capfirst %}</label>
</div>
{% if form.mileage.errors %}
<div class="text-danger small">
{{ form.mileage.errors|striptags }}
</div>
{% endif %}
</div>
</div>
</div>
@ -201,12 +176,6 @@
{% trans 'Receiving Date' %}:
</label>
</div>
{% if form.receiving_date.errors %}
<div class="text-danger small">
{{ form.receiving_date.errors|striptags }}
</div>
{% endif %}
</div>
</div>
</div>
@ -221,21 +190,13 @@
</label>
{{ form.remarks|add_class:"form-control form-control-sm" }}
</div>
{% if form.remarks.errors %}
<div class="text-danger small">
{{ form.remarks.errors|striptags }}
</div>
{% endif %}
</div>
</div>
</div>
</div>
<!-- Specifications Buttons -->
<!--Specifications Buttons-->
<div class="btn-group mt-3">
<button type="submit" name="add_another" value="true" class="btn btn-sm btn-phoenix-success me-1">
{% trans "Save and Add Another" %}
</button>
@ -243,7 +204,6 @@
{% trans "Save and Go to Inventory" %}
</button>
</div>
</div>
</div>
</main>
@ -264,7 +224,6 @@
<h5 class="modal-title" id="specificationsModalLabel">
<span class="ms-3 my-5">{% trans 'specifications'|capfirst %}</span><span class="ms-1 fw-light">{{ _("Details") }}</span>
</h5>
<button class="btn btn-circle project-modal-btn position-absolute end-0 top-0 mt-3 me-3 bg-body-emphasis" data-bs-dismiss="modal">
<span class="fa-solid fa-xmark text-body dark__text-gray-100"></span>
</button>
@ -318,7 +277,7 @@
</div>
</div>
<!-- Scanner Modal -->
<!--Scanner Modal-->
<div class="modal fade" id="scannerModal" tabindex="-1" aria-labelledby="scannerModalLabel">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content rounded-top-3">
@ -334,7 +293,6 @@
</div>
</div>
</div>
<!-- CAR FORM -->
</div>
<script>

View File

@ -4,15 +4,14 @@
{% block title %}{{ _("Bank Accounts") }}{% endblock title %}
{% block content %}
<div class="row mt-4 mx-4">
<div class="d-flex justify-content-between mb-2 p-6">
<span></span>
<h3 class="text-center">{% trans "Bank Accounts" %}</h3>
<a href="{% url 'bank_account_create' %}" class="btn btn-sm btn-success ">{% trans "Add Bank Account" %}</a>
</div>
<div class="mx-n4 px-4 mx-lg-n6 px-lg-6 bg-body-emphasis pt-7 border-y">
<div class="row mt-4">
<div class="d-flex justify-content-between mb-2">
<div class="table-responsive mx-n1 px-1 scrollbar">
<h3 class="">{% trans "Bank Accounts" %}</h3>
<a href="{% url 'bank_account_create' %}" class="btn btn-sm btn-phoenix-primary ">{% trans "Add Bank Account" %}</a>
</div>
<div class="table-responsive px-1 scrollbar">
<table class="table fs-9 mb-0 border-top border-translucent">
<thead>
<tr>
@ -45,6 +44,6 @@
</div>
<div class="d-flex justify-content-center">
</div>
</div>
</div>
{% endblock %}

View File

@ -27,12 +27,12 @@
</div>
</div>
<div class="row my-5">
<div class="card rounded">
<div class="card-header">
<p class="mb-0">{{ header_title|upper }}</p>
<div class="row my-3">
<div class="">
<div class="">
<p class="mb-3"></p>
</div>
<div class="card-body">
<div class="">
<div class="row">
<div class="col-md-6">
<p>
@ -44,7 +44,12 @@
</div>
<div class="col-md-6">
<p>
<strong>{{ _('Balance Type') }}:</strong> {{ account.balance_type }}
{% if account.balance_type == 'debit' %}
<strong>{{ _('Balance Type') }}:</strong><div class="badge badge-phoenix fs-10 badge-phoenix-success"> <span class="fw-bold">{{ _("Debit") }}</span><span class="ms-1 fas fa-arrow-circle-down"></span></div>
{% else %}
<strong>{{ _('Balance Type') }}:</strong><div class="badge badge-phoenix fs-10 badge-phoenix-danger"> <span class="fw-bold">{{ _("Credit") }}</span><span class="ms-1 fas fa-arrow-circle-up"></span></div>
{% endif %}
</p>
<p>
<strong>{{ _('Active') }}:</strong> {{ account.active }}
@ -52,15 +57,15 @@
</div>
</div>
<div class="row">
<div class="col">
<table class="table is-fullwidth is-narrow is-striped is-bordered django-ledger-table-bottom-margin-75">
<div class="table-responsive">
<table class="table table-sm fs-9 mb-0">
<tr>
<th class="has-text-centered">{{ _('JE Number') }}</th>
<th class="has-text-centered">{{ _('Date') }}</th>
<th class="has-text-centered">{{ _('Debit') }}</th>
<th class="has-text-centered">{{ _('Credit') }}</th>
<th class="has-text-centered">{{ _('Description') }}</th>
<th class="has-text-centered">{{ _('Unit') }}</th>
<th class="has-text-centered">{{ _('Actions') }}</th>
</tr>
@ -70,16 +75,16 @@
<td>{{ tx.journal_entry.timestamp }}</td>
<td>
{% if tx.tx_type == 'debit' %}
${{ tx.amount }}
{{ tx.amount }}
{% endif %}
</td>
<td>
{% if tx.tx_type == 'credit' %}
${{ tx.amount }}
{{ tx.amount }}
{% endif %}
</td>
<td>{{ tx.description }}</td>
<td>{{ tx.journal_entry.entity_unit.name }}</td>
<td>
<div class="btn-reveal-trigger position-static">
<button class="btn btn-sm dropdown-toggle dropdown-caret-none transition-none btn-reveal fs-10" type="button" data-bs-toggle="dropdown" data-boundary="window" aria-haspopup="true" aria-expanded="false" data-bs-reference="parent"><span class="fas fa-ellipsis-h fs-10"></span></button>
@ -92,9 +97,9 @@
{% endfor %}
<tr class="has-text-weight-bold">
<td></td>
<td class="has-text-right">Total</td>
<td class="has-text-centered">${{ total_debits }}</td>
<td class="has-text-centered">${{ total_credits }}</td>
<td class="has-text-right"><span class="fw-bold fs-8">{{ _("Total") }}</span></td>
<td class="has-text-centered"><span class="fw-bold fs-8">{{ total_debits }} {{ _("SAR") }}</span></td>
<td class="has-text-centered"><span class="fw-bold fs-8">{{ total_credits }} {{ _("SAR") }}</span></td>
<td></td>
<td></td>
<td></td>
@ -103,16 +108,16 @@
</div>
</div>
</div>
<div class="card-footer d-flex">
<a class="btn btn-sm btn-primary me-1" href="{% url 'account_update' account.pk %}">
<div class="mt-3 d-flex">
<a class="btn btn-sm btn-phoenix-primary me-1" href="{% url 'account_update' account.pk %}">
<!-- <i class="bi bi-pencil-square"></i> -->
{{ _('Edit') }}
</a>
<a class="btn btn-sm btn-danger me-1" data-bs-toggle="modal" data-bs-target="#deleteModal">
<a class="btn btn-sm btn-phoenix-danger me-1" data-bs-toggle="modal" data-bs-target="#deleteModal">
<!-- <i class="bi bi-trash-fill"></i> -->
{{ _('Delete') }}
</a>
<a class="btn btn-sm btn-secondary" href="{% url 'account_list' %}">
<a class="btn btn-sm btn-phoenix-secondary" href="{% url 'account_list' %}">
<!-- <i class="bi bi-arrow-left-square-fill"></i> -->
{% trans 'Back to List' %}
</a>

View File

@ -8,14 +8,12 @@
</a>
{% endblock %}
{% block content %}
<div class="d-flex flex-column min-vh-100">
<div class="d-flex flex-column flex-sm-grow-1 ms-sm-14 p-4">
<main class="d-grid gap-4 p-1">
<!-- Search Bar -->
<div class="row g-4">
<div class="row mt-4">
<h3 class="mb-3">{% trans "Accounts" %}</h3>
<div class="col-12">
<div class="row-fluid p-2">
<form method="get">
<form method="get" class=" mb-4">
<div class="input-group input-group-sm">
<button class="btn btn-sm btn-secondary rounded-start" type="submit">
{% trans "search" %}
@ -35,15 +33,10 @@
</form>
</div>
</div>
</div>
<!-- Customer Table -->
{% if page_obj.object_list %}
<div id="accountsTable">
<div class="table-responsive">
<table class="table table-sm fs-9 mb-0">
<div class="table-responsive px-1 scrollbar">
<table class="table fs-9 mb-0 border-top border-translucent">
<thead>
<tr class="bg-body-highlight">
@ -140,9 +133,7 @@
</div>
</div>
</div>
{% endif %}
</main>
</div>
</div>
{% endblock %}

View File

@ -46,7 +46,7 @@
<td class="text-center">
<a href="{% url 'estimate_detail' estimate.pk %}"
class="btn btn-sm btn-phoenix-success">
{% trans "view" %}
{% trans "view"|capfirst %}
</a>
</td>
</tr>

View File

@ -6,10 +6,10 @@
{% block content %}
<div class="row mt-4">
<h3 class="text-center">{% trans "Invoices" %}</h3>
<div class="mx-n4 px-4 mx-lg-n6 px-lg-6 bg-body-emphasis pt-7 border-y">
<div class="table-responsive mx-n1 px-1 scrollbar">
<table class="table fs-9 mb-0 border-top border-translucent">
<div class="table-responsive">
<table class="table table-sm fs-9 mb-0">
<thead>
<tr>
<th class="sort white-space-nowrap align-middle" scope="col">{% trans "Invoice Number" %}</th>
@ -45,6 +45,6 @@
</div>
<div class="d-flex justify-content-center">
</div>
</div>
</div>
{% endblock %}