diff --git a/.gitignore b/.gitignore index ff2fa59..21c3f5e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,335 +1,26 @@ -# Created by https://www.toptal.com/developers/gitignore/api/emacs,python,django,venv -# Edit at https://www.toptal.com/developers/gitignore?templates=emacs,python,django,venv - -### Django ### -*.log -*.pot -*.pyc -__pycache__/ -local_settings.py -db.sqlite3 -db.sqlite3-journal -media - -# If your build process includes running collectstatic, then you probably don't need or want to include staticfiles/ -# in your Git repository. Update and uncomment the following line accordingly. -# /staticfiles/ - -### Django.Python Stack ### -# Byte-compiled / optimized / DLL files -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -wheels/ -share/python-wheels/ -*.egg-info/ -.installed.cfg -*.egg -MANIFEST - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.nox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*.cover -*.py,cover -.hypothesis/ -.pytest_cache/ -cover/ - -# Translations -*.mo - -# Django stuff: - -# Flask stuff: -instance/ -.webassets-cache - -# Scrapy stuff: -.scrapy - -# Sphinx documentation -docs/_build/ - -# PyBuilder -.pybuilder/ -target/ - -# Jupyter Notebook -.ipynb_checkpoints - -# IPython -profile_default/ -ipython_config.py - -# pyenv -# For a library or package, you might want to ignore these files since the code is -# intended to run in multiple environments; otherwise, check them in: -# .python-version - -# pipenv -# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. -# However, in case of collaboration, if having platform-specific dependencies or dependencies -# having no cross-platform support, pipenv may install dependencies that don't work, or not -# install all needed dependencies. -#Pipfile.lock - -# poetry -# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. -# This is especially recommended for binary packages to ensure reproducibility, and is more -# commonly ignored for libraries. -# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control -#poetry.lock - -# pdm -# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. -#pdm.lock -# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it -# in version control. -# https://pdm.fming.dev/#use-with-ide -.pdm.toml - -# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm -__pypackages__/ - -# Celery stuff -celerybeat-schedule -celerybeat.pid - -# SageMath parsed files -*.sage.py - -# Environments -.env -.venv -env/ -venv/ -ENV/ -env.bak/ -venv.bak/ - -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -# mkdocs documentation -/site - -# mypy -.mypy_cache/ -.dmypy.json -dmypy.json - -# Pyre type checker -.pyre/ - -# pytype static type analyzer -.pytype/ - -# Cython debug symbols -cython_debug/ - -# PyCharm -# JetBrains specific template is maintained in a separate JetBrains.gitignore that can -# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore -# and can be added to the global gitignore or merged into this file. For a more nuclear -# option (not recommended) you can uncomment the following to ignore the entire idea folder. -#.idea/ - -### Emacs ### -# -*- mode: gitignore; -*- -*~ -\#*\# -/.emacs.desktop -/.emacs.desktop.lock -*.elc -auto-save-list -tramp -.\#* - -# Org-mode -.org-id-locations -*_archive - -# flymake-mode -*_flymake.* - -# eshell files -/eshell/history -/eshell/lastdir - -# elpa packages -/elpa/ - -# reftex files -*.rel - -# AUCTeX auto folder -/auto/ - -# cask packages -.cask/ - -# Flycheck -flycheck_*.el - -# server auth directory -/server/ - -# projectiles files -.projectile - -# directory configuration -.dir-locals.el - -# network security -/network-security.data - - -### Python ### -# Byte-compiled / optimized / DLL files - -# C extensions - -# Distribution / packaging - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. - -# Installer logs - -# Unit test / coverage reports - -# Translations - -# Django stuff: - -# Flask stuff: - -# Scrapy stuff: - -# Sphinx documentation - -# PyBuilder - -# Jupyter Notebook - -# IPython - -# pyenv -# For a library or package, you might want to ignore these files since the code is -# intended to run in multiple environments; otherwise, check them in: -# .python-version - -# pipenv -# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. -# However, in case of collaboration, if having platform-specific dependencies or dependencies -# having no cross-platform support, pipenv may install dependencies that don't work, or not -# install all needed dependencies. - -# poetry -# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. -# This is especially recommended for binary packages to ensure reproducibility, and is more -# commonly ignored for libraries. -# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control - -# pdm -# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. -# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it -# in version control. -# https://pdm.fming.dev/#use-with-ide - -# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm - -# Celery stuff - -# SageMath parsed files - -# Environments - -# Spyder project settings - -# Rope project settings - -# mkdocs documentation - -# mypy - -# Pyre type checker - -# pytype static type analyzer - -# Cython debug symbols - -# PyCharm -# JetBrains specific template is maintained in a separate JetBrains.gitignore that can -# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore -# and can be added to the global gitignore or merged into this file. For a more nuclear -# option (not recommended) you can uncomment the following to ignore the entire idea folder. - -### Python Patch ### -# Poetry local configuration file - https://python-poetry.org/docs/configuration/#local-configuration -poetry.toml - -# ruff -.ruff_cache/ - -# LSP config files -pyrightconfig.json - -### venv ### -# Virtualenv -# http://iamzed.com/2009/05/07/a-primer-on-virtualenv/ -[Bb]in -[Ii]nclude -[Ll]ib -[Ll]ib64 -[Ll]ocal -[Ss]cripts -pyvenv.cfg -pip-selfcheck.json - -# End of https://www.toptal.com/developers/gitignore/api/emacs,python,django,venv - -/tienda_ilusion/don_confiao/static/frontend/ -/tienda_ilusion/don_confiao/frontend/don-confiao/.vite/ -/tienda_ilusion/don_confiao/frontend/don-confiao/.eslintrc.js -/tienda_ilusion/don_confiao/frontend/don-confiao/.eslintrc-auto-import.json -/tienda_ilusion/don_confiao/frontend/don-confiao/.editorconfig -/tienda_ilusion/don_confiao/frontend/don-confiao/.browserslistrc +.DS_Store +node_modules +/dist + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? +/.browserslistrc +/.editorconfig +/.eslintrc-auto-import.json +/.eslintrc.js diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/README.md b/README.md similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/README.md rename to README.md diff --git a/django.Dockerfile b/django.Dockerfile deleted file mode 100644 index 77a17dc..0000000 --- a/django.Dockerfile +++ /dev/null @@ -1,8 +0,0 @@ -from python:3.12-slim - -WORKDIR /app/ - -COPY requirements.txt ./ -RUN pip install --no-cache-dir -r requirements.txt - -CMD ["python", "manage.py", "runserver", "0.0.0.0:9090"] diff --git a/docker-compose.yml b/docker-compose.yml index a418a7b..6678e8f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,27 +1,10 @@ services: - nginx: - build: - context: ./ - dockerfile: nginx.Dockerfile - ports: - - "7000:80" - volumes: - - ./nginx.conf:/etc/nginx/conf.d/default.conf - - ./tienda_ilusion/don_confiao/static/frontend:/var/www/frontend/ - django: - build: - context: ./ - dockerfile: django.Dockerfile - volumes: - - ./tienda_ilusion:/app/ - ports: - - "7001:9090" frontend: build: context: ./ dockerfile: vuetify.Dockerfile volumes: - - ./tienda_ilusion/don_confiao/frontend/don-confiao:/app/ + - ./:/app/ ports: - - "7003:3000" + - "7001:3000" diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/index.html b/index.html similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/index.html rename to index.html diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/jsconfig.json b/jsconfig.json similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/jsconfig.json rename to jsconfig.json diff --git a/nginx.Dockerfile b/nginx.Dockerfile deleted file mode 100644 index 587874a..0000000 --- a/nginx.Dockerfile +++ /dev/null @@ -1,10 +0,0 @@ -FROM nginx:latest - -# Copiamos el archivo de configuración NGINX -COPY nginx.conf /etc/nginx/conf.d/default.conf - -# Establecemos la variable de entorno para el proxy inverso -ENV DJANGO_PROXY_URL http://django:8000 - -# Creamos un directorio estático -RUN mkdir -p /var/www/frontend diff --git a/nginx.conf b/nginx.conf deleted file mode 100644 index 4e1d1ec..0000000 --- a/nginx.conf +++ /dev/null @@ -1,25 +0,0 @@ -server { - listen 80; - server_name donconfiao.org; - - # location /frontend { - # alias /var/www/frontend/; - # autoindex on; - # } - - location /frontend { - proxy_pass http://frontend:3000/frontend; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - } - - location / { - proxy_pass http://django:9090; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - } -} \ No newline at end of file diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/package-lock.json b/package-lock.json similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/package-lock.json rename to package-lock.json diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/package.json b/package.json similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/package.json rename to package.json diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/public/1.ico b/public/1.ico similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/public/1.ico rename to public/1.ico diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/public/favicon.ico b/public/favicon.ico similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/public/favicon.ico rename to public/favicon.ico diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 035edf6..0000000 --- a/requirements.txt +++ /dev/null @@ -1,2 +0,0 @@ -Django==5.0.6 -djangorestframework diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/App.vue b/src/App.vue similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/src/App.vue rename to src/App.vue diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/assets/icons/rectangle-xmark-solid.svg b/src/assets/icons/rectangle-xmark-solid.svg similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/src/assets/icons/rectangle-xmark-solid.svg rename to src/assets/icons/rectangle-xmark-solid.svg diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/assets/logo.png b/src/assets/logo.png similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/src/assets/logo.png rename to src/assets/logo.png diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/assets/logo.svg b/src/assets/logo.svg similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/src/assets/logo.svg rename to src/assets/logo.svg diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/components/AppFooter.vue b/src/components/AppFooter.vue similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/src/components/AppFooter.vue rename to src/components/AppFooter.vue diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/components/CasherModal.vue b/src/components/CasherModal.vue similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/src/components/CasherModal.vue rename to src/components/CasherModal.vue diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/components/CodeDialog.vue b/src/components/CodeDialog.vue similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/src/components/CodeDialog.vue rename to src/components/CodeDialog.vue diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/components/CreateCustomerModal.vue b/src/components/CreateCustomerModal.vue similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/src/components/CreateCustomerModal.vue rename to src/components/CreateCustomerModal.vue diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/components/CurrencyText.vue b/src/components/CurrencyText.vue similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/src/components/CurrencyText.vue rename to src/components/CurrencyText.vue diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/components/HelloWorld.vue b/src/components/HelloWorld.vue similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/src/components/HelloWorld.vue rename to src/components/HelloWorld.vue diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/components/ModalView.vue b/src/components/ModalView.vue similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/src/components/ModalView.vue rename to src/components/ModalView.vue diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/components/NavBar.vue b/src/components/NavBar.vue similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/src/components/NavBar.vue rename to src/components/NavBar.vue diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/components/Purchase.vue b/src/components/Purchase.vue similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/src/components/Purchase.vue rename to src/components/Purchase.vue diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/components/README.md b/src/components/README.md similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/src/components/README.md rename to src/components/README.md diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/components/ReconciliationJar.vue b/src/components/ReconciliationJar.vue similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/src/components/ReconciliationJar.vue rename to src/components/ReconciliationJar.vue diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/components/ReconciliationJarIndex.vue b/src/components/ReconciliationJarIndex.vue similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/src/components/ReconciliationJarIndex.vue rename to src/components/ReconciliationJarIndex.vue diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/components/ReconciliationJarView.vue b/src/components/ReconciliationJarView.vue similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/src/components/ReconciliationJarView.vue rename to src/components/ReconciliationJarView.vue diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/components/ResaltedText.vue b/src/components/ResaltedText.vue similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/src/components/ResaltedText.vue rename to src/components/ResaltedText.vue diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/components/SummaryPurchase.vue b/src/components/SummaryPurchase.vue similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/src/components/SummaryPurchase.vue rename to src/components/SummaryPurchase.vue diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/components/SummaryPurchaseModal.vue b/src/components/SummaryPurchaseModal.vue similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/src/components/SummaryPurchaseModal.vue rename to src/components/SummaryPurchaseModal.vue diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/components/SummaryReconciliation.vue b/src/components/SummaryReconciliation.vue similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/src/components/SummaryReconciliation.vue rename to src/components/SummaryReconciliation.vue diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/components/SummaryReconciliationModal.vue b/src/components/SummaryReconciliationModal.vue similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/src/components/SummaryReconciliationModal.vue rename to src/components/SummaryReconciliationModal.vue diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/components/Wellcome.vue b/src/components/Wellcome.vue similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/src/components/Wellcome.vue rename to src/components/Wellcome.vue diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/layouts/README.md b/src/layouts/README.md similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/src/layouts/README.md rename to src/layouts/README.md diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/layouts/default.vue b/src/layouts/default.vue similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/src/layouts/default.vue rename to src/layouts/default.vue diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/main.js b/src/main.js similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/src/main.js rename to src/main.js diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/pages/README.md b/src/pages/README.md similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/src/pages/README.md rename to src/pages/README.md diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/pages/comprar.vue b/src/pages/comprar.vue similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/src/pages/comprar.vue rename to src/pages/comprar.vue diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/pages/cuadrar_tarro.vue b/src/pages/cuadrar_tarro.vue similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/src/pages/cuadrar_tarro.vue rename to src/pages/cuadrar_tarro.vue diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/pages/cuadres_de_tarro.vue b/src/pages/cuadres_de_tarro.vue similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/src/pages/cuadres_de_tarro.vue rename to src/pages/cuadres_de_tarro.vue diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/pages/index.vue b/src/pages/index.vue similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/src/pages/index.vue rename to src/pages/index.vue diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/pages/summary_purchase.vue b/src/pages/summary_purchase.vue similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/src/pages/summary_purchase.vue rename to src/pages/summary_purchase.vue diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/plugins/README.md b/src/plugins/README.md similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/src/plugins/README.md rename to src/plugins/README.md diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/plugins/index.js b/src/plugins/index.js similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/src/plugins/index.js rename to src/plugins/index.js diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/plugins/vuetify.js b/src/plugins/vuetify.js similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/src/plugins/vuetify.js rename to src/plugins/vuetify.js diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/router/index.js b/src/router/index.js similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/src/router/index.js rename to src/router/index.js diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/services/api-implementation.js b/src/services/api-implementation.js similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/src/services/api-implementation.js rename to src/services/api-implementation.js diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/services/api.js b/src/services/api.js similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/src/services/api.js rename to src/services/api.js diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/services/django-api.js b/src/services/django-api.js similarity index 68% rename from tienda_ilusion/don_confiao/frontend/don-confiao/src/services/django-api.js rename to src/services/django-api.js index abe9f4d..fe07976 100644 --- a/tienda_ilusion/don_confiao/frontend/don-confiao/src/services/django-api.js +++ b/src/services/django-api.js @@ -1,56 +1,60 @@ class DjangoApi { + constructor() { + this.base = 'http://localhost:7000'; + } + getCustomers() { - const url = '/don_confiao/api/customers/'; + const url = this.base + '/don_confiao/api/customers/'; return this.getRequest(url); } getProducts() { - const url = '/don_confiao/api/products/'; + const url = this.base + '/don_confiao/api/products/'; return this.getRequest(url); } getPaymentMethods() { - const url = '/don_confiao/payment_methods/all/select_format'; + const url = this.base + '/don_confiao/payment_methods/all/select_format'; return this.getRequest(url); } getSummaryPurchase(purchaseId) { - const url = `/don_confiao/resumen_compra_json/${purchaseId}`; + const url = this.base + `/don_confiao/resumen_compra_json/${purchaseId}`; return this.getRequest(url); } getPurchasesForReconciliation() { - const url = '/don_confiao/purchases/for_reconciliation'; + const url = this.base + '/don_confiao/purchases/for_reconciliation'; return this.getRequest(url); } getListReconcliations(page, itemsPerPage) { - const url = `/don_confiao/api/reconciliate_jar/?page=${page}&page_size=${itemsPerPage}`; + const url = this.base + `/don_confiao/api/reconciliate_jar/?page=${page}&page_size=${itemsPerPage}`; return this.getRequest(url); } getReconciliation(reconciliationId) { - const url = `/don_confiao/api/reconciliate_jar/${reconciliationId}/`; + const url = this.base + `/don_confiao/api/reconciliate_jar/${reconciliationId}/`; return this.getRequest(url); } isValidAdminCode(code) { - const url = `/don_confiao/api/admin_code/validate/${code}` + const url = this.base + `/don_confiao/api/admin_code/validate/${code}` return this.getRequest(url) } createPurchase(purchase) { - const url = '/don_confiao/api/sales/'; + const url = this.base + '/don_confiao/api/sales/'; return this.postRequest(url, purchase); } createReconciliationJar(reconciliation) { - const url = '/don_confiao/reconciliate_jar'; + const url = this.base + '/don_confiao/reconciliate_jar'; return this.postRequest(url, reconciliation); } createCustomer(customer) { - const url = '/don_confiao/api/customers/'; + const url = this.base + '/don_confiao/api/customers/'; return this.postRequest(url, customer); } diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/stores/README.md b/src/stores/README.md similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/src/stores/README.md rename to src/stores/README.md diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/stores/app.js b/src/stores/app.js similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/src/stores/app.js rename to src/stores/app.js diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/stores/index.js b/src/stores/index.js similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/src/stores/index.js rename to src/stores/index.js diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/styles/README.md b/src/styles/README.md similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/src/styles/README.md rename to src/styles/README.md diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/src/styles/settings.scss b/src/styles/settings.scss similarity index 100% rename from tienda_ilusion/don_confiao/frontend/don-confiao/src/styles/settings.scss rename to src/styles/settings.scss diff --git a/tienda_ilusion/don_confiao/__init__.py b/tienda_ilusion/don_confiao/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/tienda_ilusion/don_confiao/admin.py b/tienda_ilusion/don_confiao/admin.py deleted file mode 100644 index f9f2fe7..0000000 --- a/tienda_ilusion/don_confiao/admin.py +++ /dev/null @@ -1,12 +0,0 @@ -from django.contrib import admin -from .models import ( - Customer, Sale, SaleLine, Product, ProductCategory, Payment, - ReconciliationJar) - -admin.site.register(Customer) -admin.site.register(Sale) -admin.site.register(SaleLine) -admin.site.register(Product) -admin.site.register(ProductCategory) -admin.site.register(Payment) -admin.site.register(ReconciliationJar) diff --git a/tienda_ilusion/don_confiao/api_views.py b/tienda_ilusion/don_confiao/api_views.py deleted file mode 100644 index fc462cc..0000000 --- a/tienda_ilusion/don_confiao/api_views.py +++ /dev/null @@ -1,146 +0,0 @@ -from rest_framework import viewsets -from rest_framework.response import Response -from rest_framework.status import HTTP_400_BAD_REQUEST -from rest_framework.views import APIView -from rest_framework.pagination import PageNumberPagination - -from .models import Sale, SaleLine, Customer, Product, ReconciliationJar, PaymentMethods, AdminCode -from .serializers import SaleSerializer, ProductSerializer, CustomerSerializer, ReconciliationJarSerializer, PaymentMethodSerializer, SaleForRenconciliationSerializer, SaleSummarySerializer - -from decimal import Decimal -import json - - -class Pagination(PageNumberPagination): - page_size = 10 - page_size_query_param = 'page_size' - - -class SaleView(viewsets.ModelViewSet): - queryset = Sale.objects.all() - serializer_class = SaleSerializer - - def create(self, request): - data = request.data - customer = Customer.objects.get(pk=data['customer']) - date = data['date'] - lines = data['saleline_set'] - payment_method = data['payment_method'] - sale = Sale.objects.create( - customer=customer, - date=date, - payment_method=payment_method - ) - - for line in lines: - product = Product.objects.get(pk=line['product']) - quantity = line['quantity'] - unit_price = line['unit_price'] - SaleLine.objects.create( - sale=sale, - product=product, - quantity=quantity, - unit_price=unit_price - ) - - return Response( - {'id': sale.id, 'message': 'Venta creada con exito'}, - status=201 - ) - - -class ProductView(viewsets.ModelViewSet): - queryset = Product.objects.all() - serializer_class = ProductSerializer - - -class CustomerView(viewsets.ModelViewSet): - queryset = Customer.objects.all() - serializer_class = CustomerSerializer - - -class ReconciliateJarView(APIView): - def post(self, request): - data = request.data - cash_purchases_id = data.get('cash_purchases') - serializer = ReconciliationJarSerializer(data=data) - if serializer.is_valid(): - cash_purchases = Sale.objects.filter(pk__in=cash_purchases_id) - if not self._is_valid_total(cash_purchases, data.get('total_cash_purchases')): - return Response( - {'error': 'total_cash_purchases not equal to sum of all purchases.'}, - status=HTTP_400_BAD_REQUEST - ) - reconciliation = serializer.save() - other_purchases = self._get_other_purchases(data.get('other_totals')) - - self._link_purchases(reconciliation, cash_purchases, other_purchases) - return Response({'id': reconciliation.id}) - return Response(serializer.errors, status=HTTP_400_BAD_REQUEST) - - def get(self, request): - reconciliations = ReconciliationJar.objects.all() - serializer = ReconciliationJarSerializer(reconciliations, many=True) - return Response(serializer.data) - - def _is_valid_total(self, purchases, total): - calculated_total = sum(p.get_total() for p in purchases) - return calculated_total == Decimal(total) - - def _get_other_purchases(self, other_totals): - if not other_totals: - return [] - purchases = [] - for method in other_totals: - purchases.extend(other_totals[method]['purchases']) - if purchases: - return Sale.objects.filter(pk__in=purchases) - return [] - - def _link_purchases(self, reconciliation, cash_purchases, other_purchases): - for purchase in cash_purchases: - purchase.reconciliation = reconciliation - purchase.clean() - purchase.save() - - for purchase in other_purchases: - purchase.reconciliation = reconciliation - purchase.clean() - purchase.save() - - -class PaymentMethodView(APIView): - def get(self, request): - serializer = PaymentMethodSerializer(PaymentMethods.choices, many=True) - return Response(serializer.data) - - -class SalesForReconciliationView(APIView): - def get(self, request): - sales = Sale.objects.filter(reconciliation=None) - grouped_sales = {} - - for sale in sales: - if sale.payment_method not in grouped_sales.keys(): - grouped_sales[sale.payment_method] = [] - serializer = SaleForRenconciliationSerializer(sale) - grouped_sales[sale.payment_method].append(serializer.data) - - return Response(grouped_sales) - -class SaleSummary(APIView): - def get(self, request, id): - sale = Sale.objects.get(pk=id) - serializer = SaleSummarySerializer(sale) - return Response(serializer.data) - -class AdminCodeValidateView(APIView): - def get(self, request, code): - codes = AdminCode.objects.filter(value=code) - return Response({'validCode': bool(codes)}) - - -class ReconciliateJarModelView(viewsets.ModelViewSet): - queryset = ReconciliationJar.objects.all().order_by('-date_time') - pagination_class = Pagination - serializer_class = ReconciliationJarSerializer diff --git a/tienda_ilusion/don_confiao/apps.py b/tienda_ilusion/don_confiao/apps.py deleted file mode 100644 index 1680d2d..0000000 --- a/tienda_ilusion/don_confiao/apps.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.apps import AppConfig - - -class DonConfiaoConfig(AppConfig): - default_auto_field = 'django.db.models.BigAutoField' - name = 'don_confiao' diff --git a/tienda_ilusion/don_confiao/example_customer.csv b/tienda_ilusion/don_confiao/example_customer.csv deleted file mode 100644 index 4795cc8..0000000 --- a/tienda_ilusion/don_confiao/example_customer.csv +++ /dev/null @@ -1,4 +0,0 @@ -nombre,correo,telefono -Alejandro Ayala,mono@disroot.org,3232321 -Mono Francisco,pablo@onecluster.org,321312312 -Pablo Bolivar,alejo@onecluster.org,3243242 diff --git a/tienda_ilusion/don_confiao/example_products.csv b/tienda_ilusion/don_confiao/example_products.csv deleted file mode 100644 index 46228a7..0000000 --- a/tienda_ilusion/don_confiao/example_products.csv +++ /dev/null @@ -1,4 +0,0 @@ -"producto","unidad","precio","categorias" -"Aceite","Unidad", 50000,"Aceites&Alimentos" -"Café","Unidad", 14000,"Cafes&Alimentos" -"Arroz","Unidad", 7000,"Cafes&Alimentos" diff --git a/tienda_ilusion/don_confiao/example_products2.csv b/tienda_ilusion/don_confiao/example_products2.csv deleted file mode 100644 index 787e48d..0000000 --- a/tienda_ilusion/don_confiao/example_products2.csv +++ /dev/null @@ -1,4 +0,0 @@ -"producto","unidad","precio","categorias" -"Aceite","Unidad", 50000,"Aceites&Alimentos" -"Café","Unidad", 15000,"Cafes&Alimentos" -"Arroz","Unidad", 6000,"Alimentos&Granos" diff --git a/tienda_ilusion/don_confiao/export_csv.py b/tienda_ilusion/don_confiao/export_csv.py deleted file mode 100644 index e5a0d9b..0000000 --- a/tienda_ilusion/don_confiao/export_csv.py +++ /dev/null @@ -1 +0,0 @@ -#!/usr/bin/env python3 diff --git a/tienda_ilusion/don_confiao/forms.py b/tienda_ilusion/don_confiao/forms.py deleted file mode 100644 index faef067..0000000 --- a/tienda_ilusion/don_confiao/forms.py +++ /dev/null @@ -1,66 +0,0 @@ -from django import forms -from django.forms.models import inlineformset_factory - -from django.forms.widgets import DateInput, DateTimeInput - -from .models import Sale, SaleLine, PaymentMethods - -readonly_number_widget = forms.NumberInput(attrs={'readonly': 'readonly'}) - - -class ImportProductsForm(forms.Form): - csv_file = forms.FileField() - - -class ImportCustomersForm(forms.Form): - csv_file = forms.FileField() - - -class PurchaseForm(forms.ModelForm): - class Meta: - model = Sale - fields = [ - "customer", - "date", - "phone", - "description", - ] - widgets = { - 'date': DateInput(attrs={'type': 'date'}) - } - - -class PurchaseLineForm(forms.ModelForm): - class Meta: - model = SaleLine - fields = [ - "product", - "quantity", - "unit_price", - "description", - ] - - -class PurchaseSummaryForm(forms.Form): - quantity_lines = forms.IntegerField( - widget=readonly_number_widget - ) - quantity_products = forms.IntegerField( - widget=readonly_number_widget - ) - ammount = forms.DecimalField( - max_digits=10, - decimal_places=2, - widget=readonly_number_widget - ) - payment_method = forms.ChoiceField( - choices=[(PaymentMethods.CASH, PaymentMethods.CASH)], - ) - - -SaleLineFormSet = inlineformset_factory( - Sale, - SaleLine, - extra=1, - fields='__all__' -) diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/.gitignore b/tienda_ilusion/don_confiao/frontend/don-confiao/.gitignore deleted file mode 100644 index 11f5d71..0000000 --- a/tienda_ilusion/don_confiao/frontend/don-confiao/.gitignore +++ /dev/null @@ -1,22 +0,0 @@ -.DS_Store -node_modules -/dist - -# local env files -.env.local -.env.*.local - -# Log files -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* - -# Editor directories and files -.idea -.vscode -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? diff --git a/tienda_ilusion/don_confiao/migrations/0001_initial.py b/tienda_ilusion/don_confiao/migrations/0001_initial.py deleted file mode 100644 index 17d5d13..0000000 --- a/tienda_ilusion/don_confiao/migrations/0001_initial.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 5.0.6 on 2024-06-22 15:25 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='Sale', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ], - ), - ] diff --git a/tienda_ilusion/don_confiao/migrations/0002_alter_saleline_product.py b/tienda_ilusion/don_confiao/migrations/0002_alter_saleline_product.py deleted file mode 100644 index 0fca591..0000000 --- a/tienda_ilusion/don_confiao/migrations/0002_alter_saleline_product.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 5.0.7 on 2024-08-03 15:01 - -import django.db.models.deletion -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('don_confiao', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='saleline', - name='product', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='don_confiao.product'), - ), - ] diff --git a/tienda_ilusion/don_confiao/migrations/0002_sale_customer_sale_date_sale_description_sale_phone.py b/tienda_ilusion/don_confiao/migrations/0002_sale_customer_sale_date_sale_description_sale_phone.py deleted file mode 100644 index 8f16cb7..0000000 --- a/tienda_ilusion/don_confiao/migrations/0002_sale_customer_sale_date_sale_description_sale_phone.py +++ /dev/null @@ -1,37 +0,0 @@ -# Generated by Django 5.0.6 on 2024-06-22 15:33 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('don_confiao', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='sale', - name='customer', - field=models.CharField(default='', max_length=100), - preserve_default=False, - ), - migrations.AddField( - model_name='sale', - name='date', - field=models.DateField(default='2024-06-22', verbose_name='Date'), - preserve_default=False, - ), - migrations.AddField( - model_name='sale', - name='description', - field=models.CharField(default='', max_length=255), - preserve_default=False, - ), - migrations.AddField( - model_name='sale', - name='phone', - field=models.CharField(default='', max_length=13), - preserve_default=False, - ), - ] diff --git a/tienda_ilusion/don_confiao/migrations/0003_saleline.py b/tienda_ilusion/don_confiao/migrations/0003_saleline.py deleted file mode 100644 index 4c6d4f0..0000000 --- a/tienda_ilusion/don_confiao/migrations/0003_saleline.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 5.0.6 on 2024-06-22 15:50 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('don_confiao', '0002_sale_customer_sale_date_sale_description_sale_phone'), - ] - - operations = [ - migrations.CreateModel( - name='SaleLine', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ], - ), - ] diff --git a/tienda_ilusion/don_confiao/migrations/0004_saleline_quantity.py b/tienda_ilusion/don_confiao/migrations/0004_saleline_quantity.py deleted file mode 100644 index d24d627..0000000 --- a/tienda_ilusion/don_confiao/migrations/0004_saleline_quantity.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 5.0.6 on 2024-06-22 16:00 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('don_confiao', '0003_saleline'), - ] - - operations = [ - migrations.AddField( - model_name='saleline', - name='quantity', - field=models.IntegerField(null=True), - ), - ] diff --git a/tienda_ilusion/don_confiao/migrations/0005_saleline_sale.py b/tienda_ilusion/don_confiao/migrations/0005_saleline_sale.py deleted file mode 100644 index 5f36e09..0000000 --- a/tienda_ilusion/don_confiao/migrations/0005_saleline_sale.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 5.0.6 on 2024-06-22 16:05 - -import django.db.models.deletion -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('don_confiao', '0004_saleline_quantity'), - ] - - operations = [ - migrations.AddField( - model_name='saleline', - name='sale', - field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='don_confiao.sale'), - preserve_default=False, - ), - ] diff --git a/tienda_ilusion/don_confiao/migrations/0006_saleline_description_saleline_product_and_more.py b/tienda_ilusion/don_confiao/migrations/0006_saleline_description_saleline_product_and_more.py deleted file mode 100644 index 90c1ccb..0000000 --- a/tienda_ilusion/don_confiao/migrations/0006_saleline_description_saleline_product_and_more.py +++ /dev/null @@ -1,31 +0,0 @@ -# Generated by Django 5.0.6 on 2024-06-22 18:56 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('don_confiao', '0005_saleline_sale'), - ] - - operations = [ - migrations.AddField( - model_name='saleline', - name='description', - field=models.CharField(default='', max_length=255), - preserve_default=False, - ), - migrations.AddField( - model_name='saleline', - name='product', - field=models.CharField(default='', max_length=100), - preserve_default=False, - ), - migrations.AddField( - model_name='saleline', - name='unit_price', - field=models.DecimalField(decimal_places=2, default=0.0, max_digits=9), - preserve_default=False, - ), - ] diff --git a/tienda_ilusion/don_confiao/migrations/0007_alter_sale_description.py b/tienda_ilusion/don_confiao/migrations/0007_alter_sale_description.py deleted file mode 100644 index 8908e3d..0000000 --- a/tienda_ilusion/don_confiao/migrations/0007_alter_sale_description.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 5.0.6 on 2024-06-22 19:11 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('don_confiao', '0006_saleline_description_saleline_product_and_more'), - ] - - operations = [ - migrations.AlterField( - model_name='sale', - name='description', - field=models.CharField(blank=True, max_length=255, null=True), - ), - ] diff --git a/tienda_ilusion/don_confiao/migrations/0008_alter_sale_phone_alter_saleline_description.py b/tienda_ilusion/don_confiao/migrations/0008_alter_sale_phone_alter_saleline_description.py deleted file mode 100644 index 711209a..0000000 --- a/tienda_ilusion/don_confiao/migrations/0008_alter_sale_phone_alter_saleline_description.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 5.0.6 on 2024-06-22 19:16 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('don_confiao', '0007_alter_sale_description'), - ] - - operations = [ - migrations.AlterField( - model_name='sale', - name='phone', - field=models.CharField(blank=True, max_length=13, null=True), - ), - migrations.AlterField( - model_name='saleline', - name='description', - field=models.CharField(blank=True, max_length=255, null=True), - ), - ] diff --git a/tienda_ilusion/don_confiao/migrations/0009_productcategory_product.py b/tienda_ilusion/don_confiao/migrations/0009_productcategory_product.py deleted file mode 100644 index 6c7e15f..0000000 --- a/tienda_ilusion/don_confiao/migrations/0009_productcategory_product.py +++ /dev/null @@ -1,30 +0,0 @@ -# Generated by Django 5.0.6 on 2024-06-29 18:55 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('don_confiao', '0008_alter_sale_phone_alter_saleline_description'), - ] - - operations = [ - migrations.CreateModel( - name='ProductCategory', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=100)), - ], - ), - migrations.CreateModel( - name='Product', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=100)), - ('price', models.DecimalField(decimal_places=2, max_digits=9)), - ('measuring_unit', models.CharField(choices=[('UNIT', 'Unit')], default='UNIT', max_length=20)), - ('categories', models.ManyToManyField(to='don_confiao.productcategory')), - ], - ), - ] diff --git a/tienda_ilusion/don_confiao/migrations/0010_alter_productcategory_name.py b/tienda_ilusion/don_confiao/migrations/0010_alter_productcategory_name.py deleted file mode 100644 index c400651..0000000 --- a/tienda_ilusion/don_confiao/migrations/0010_alter_productcategory_name.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 5.0.6 on 2024-06-29 21:04 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('don_confiao', '0009_productcategory_product'), - ] - - operations = [ - migrations.AlterField( - model_name='productcategory', - name='name', - field=models.CharField(max_length=100, unique=True), - ), - ] diff --git a/tienda_ilusion/don_confiao/migrations/0011_alter_product_name.py b/tienda_ilusion/don_confiao/migrations/0011_alter_product_name.py deleted file mode 100644 index 9a6a092..0000000 --- a/tienda_ilusion/don_confiao/migrations/0011_alter_product_name.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 5.0.6 on 2024-06-29 21:48 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('don_confiao', '0010_alter_productcategory_name'), - ] - - operations = [ - migrations.AlterField( - model_name='product', - name='name', - field=models.CharField(max_length=100, unique=True), - ), - ] diff --git a/tienda_ilusion/don_confiao/migrations/0012_payment.py b/tienda_ilusion/don_confiao/migrations/0012_payment.py deleted file mode 100644 index 474ef16..0000000 --- a/tienda_ilusion/don_confiao/migrations/0012_payment.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 5.0.6 on 2024-07-13 14:50 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('don_confiao', '0011_alter_product_name'), - ] - - operations = [ - migrations.CreateModel( - name='Payment', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('date_time', models.DateTimeField()), - ('type_payment', models.CharField(choices=[('CASH', 'Cash'), ('CONFIAR', 'Confiar'), ('BANCOLOMBIA', 'Bancolombia')], default='CASH', max_length=30)), - ('mount', models.DecimalField(decimal_places=2, max_digits=9)), - ('description', models.CharField(blank=True, max_length=255, null=True)), - ], - ), - ] diff --git a/tienda_ilusion/don_confiao/migrations/0013_rename_mount_payment_amount.py b/tienda_ilusion/don_confiao/migrations/0013_rename_mount_payment_amount.py deleted file mode 100644 index c55facb..0000000 --- a/tienda_ilusion/don_confiao/migrations/0013_rename_mount_payment_amount.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 5.0.6 on 2024-07-13 15:56 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('don_confiao', '0012_payment'), - ] - - operations = [ - migrations.RenameField( - model_name='payment', - old_name='mount', - new_name='amount', - ), - ] diff --git a/tienda_ilusion/don_confiao/migrations/0014_reconciliationjar_payment_reconciliation_jar.py b/tienda_ilusion/don_confiao/migrations/0014_reconciliationjar_payment_reconciliation_jar.py deleted file mode 100644 index 9ea211f..0000000 --- a/tienda_ilusion/don_confiao/migrations/0014_reconciliationjar_payment_reconciliation_jar.py +++ /dev/null @@ -1,27 +0,0 @@ -# Generated by Django 5.0.6 on 2024-07-13 16:35 - -import django.db.models.deletion -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('don_confiao', '0013_rename_mount_payment_amount'), - ] - - operations = [ - migrations.CreateModel( - name='ReconciliationJar', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('date_time', models.DateTimeField()), - ('description', models.CharField(blank=True, max_length=255, null=True)), - ], - ), - migrations.AddField( - model_name='payment', - name='reconciliation_jar', - field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.RESTRICT, to='don_confiao.reconciliationjar'), - ), - ] diff --git a/tienda_ilusion/don_confiao/migrations/0015_alter_payment_reconciliation_jar.py b/tienda_ilusion/don_confiao/migrations/0015_alter_payment_reconciliation_jar.py deleted file mode 100644 index 55d21cb..0000000 --- a/tienda_ilusion/don_confiao/migrations/0015_alter_payment_reconciliation_jar.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 5.0.6 on 2024-07-13 16:36 - -import django.db.models.deletion -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('don_confiao', '0014_reconciliationjar_payment_reconciliation_jar'), - ] - - operations = [ - migrations.AlterField( - model_name='payment', - name='reconciliation_jar', - field=models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.RESTRICT, to='don_confiao.reconciliationjar'), - ), - ] diff --git a/tienda_ilusion/don_confiao/migrations/0016_reconciliationjar_cash_discrepancy_and_more.py b/tienda_ilusion/don_confiao/migrations/0016_reconciliationjar_cash_discrepancy_and_more.py deleted file mode 100644 index 8bb7bd2..0000000 --- a/tienda_ilusion/don_confiao/migrations/0016_reconciliationjar_cash_discrepancy_and_more.py +++ /dev/null @@ -1,37 +0,0 @@ -# Generated by Django 5.0.6 on 2024-07-13 18:10 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('don_confiao', '0015_alter_payment_reconciliation_jar'), - ] - - operations = [ - migrations.AddField( - model_name='reconciliationjar', - name='cash_discrepancy', - field=models.DecimalField(decimal_places=2, default=0, max_digits=9), - preserve_default=False, - ), - migrations.AddField( - model_name='reconciliationjar', - name='cash_float', - field=models.DecimalField(decimal_places=2, default=0, max_digits=9), - preserve_default=False, - ), - migrations.AddField( - model_name='reconciliationjar', - name='cash_taken', - field=models.DecimalField(decimal_places=2, default=0, max_digits=9), - preserve_default=False, - ), - migrations.AddField( - model_name='reconciliationjar', - name='reconciler', - field=models.CharField(default='Jorge', max_length=255), - preserve_default=False, - ), - ] diff --git a/tienda_ilusion/don_confiao/migrations/0017_reconciliationjar_draft.py b/tienda_ilusion/don_confiao/migrations/0017_reconciliationjar_draft.py deleted file mode 100644 index 13dc149..0000000 --- a/tienda_ilusion/don_confiao/migrations/0017_reconciliationjar_draft.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 5.0.6 on 2024-07-13 18:15 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('don_confiao', '0016_reconciliationjar_cash_discrepancy_and_more'), - ] - - operations = [ - migrations.AddField( - model_name='reconciliationjar', - name='draft', - field=models.BooleanField(default=False), - ), - ] diff --git a/tienda_ilusion/don_confiao/migrations/0018_rename_draft_reconciliationjar_valid.py b/tienda_ilusion/don_confiao/migrations/0018_rename_draft_reconciliationjar_valid.py deleted file mode 100644 index 7228161..0000000 --- a/tienda_ilusion/don_confiao/migrations/0018_rename_draft_reconciliationjar_valid.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 5.0.6 on 2024-07-13 18:19 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('don_confiao', '0017_reconciliationjar_draft'), - ] - - operations = [ - migrations.RenameField( - model_name='reconciliationjar', - old_name='draft', - new_name='valid', - ), - ] diff --git a/tienda_ilusion/don_confiao/migrations/0019_rename_valid_reconciliationjar_is_valid.py b/tienda_ilusion/don_confiao/migrations/0019_rename_valid_reconciliationjar_is_valid.py deleted file mode 100644 index a0d7a02..0000000 --- a/tienda_ilusion/don_confiao/migrations/0019_rename_valid_reconciliationjar_is_valid.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 5.0.6 on 2024-07-13 19:56 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('don_confiao', '0018_rename_draft_reconciliationjar_valid'), - ] - - operations = [ - migrations.RenameField( - model_name='reconciliationjar', - old_name='valid', - new_name='is_valid', - ), - ] diff --git a/tienda_ilusion/don_confiao/migrations/0020_remove_reconciliationjar_cash_float.py b/tienda_ilusion/don_confiao/migrations/0020_remove_reconciliationjar_cash_float.py deleted file mode 100644 index dea5619..0000000 --- a/tienda_ilusion/don_confiao/migrations/0020_remove_reconciliationjar_cash_float.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 5.0.6 on 2024-07-13 20:13 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('don_confiao', '0019_rename_valid_reconciliationjar_is_valid'), - ] - - operations = [ - migrations.RemoveField( - model_name='reconciliationjar', - name='cash_float', - ), - ] diff --git a/tienda_ilusion/don_confiao/migrations/0021_rename_reconciler_reconciliationjar_reconcilier.py b/tienda_ilusion/don_confiao/migrations/0021_rename_reconciler_reconciliationjar_reconcilier.py deleted file mode 100644 index 20e8f6e..0000000 --- a/tienda_ilusion/don_confiao/migrations/0021_rename_reconciler_reconciliationjar_reconcilier.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 5.0.6 on 2024-07-13 22:16 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('don_confiao', '0020_remove_reconciliationjar_cash_float'), - ] - - operations = [ - migrations.RenameField( - model_name='reconciliationjar', - old_name='reconciler', - new_name='reconcilier', - ), - ] diff --git a/tienda_ilusion/don_confiao/migrations/0022_alter_payment_reconciliation_jar.py b/tienda_ilusion/don_confiao/migrations/0022_alter_payment_reconciliation_jar.py deleted file mode 100644 index 5956a97..0000000 --- a/tienda_ilusion/don_confiao/migrations/0022_alter_payment_reconciliation_jar.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 5.0.6 on 2024-07-13 22:39 - -import django.db.models.deletion -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('don_confiao', '0021_rename_reconciler_reconciliationjar_reconcilier'), - ] - - operations = [ - migrations.AlterField( - model_name='payment', - name='reconciliation_jar', - field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.RESTRICT, to='don_confiao.reconciliationjar'), - ), - ] diff --git a/tienda_ilusion/don_confiao/migrations/0023_merge_20240803_1504.py b/tienda_ilusion/don_confiao/migrations/0023_merge_20240803_1504.py deleted file mode 100644 index 21cf79f..0000000 --- a/tienda_ilusion/don_confiao/migrations/0023_merge_20240803_1504.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 5.0.7 on 2024-08-03 15:04 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('don_confiao', '0002_alter_saleline_product'), - ('don_confiao', '0022_alter_payment_reconciliation_jar'), - ] - - operations = [ - ] diff --git a/tienda_ilusion/don_confiao/migrations/0024_alter_product_name.py b/tienda_ilusion/don_confiao/migrations/0024_alter_product_name.py deleted file mode 100644 index 152a9f0..0000000 --- a/tienda_ilusion/don_confiao/migrations/0024_alter_product_name.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 5.0.7 on 2024-08-03 15:14 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('don_confiao', '0023_merge_20240803_1504'), - ] - - operations = [ - migrations.AlterField( - model_name='product', - name='name', - field=models.CharField(max_length=100), - ), - ] diff --git a/tienda_ilusion/don_confiao/migrations/0025_customer.py b/tienda_ilusion/don_confiao/migrations/0025_customer.py deleted file mode 100644 index a6dd678..0000000 --- a/tienda_ilusion/don_confiao/migrations/0025_customer.py +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Django 5.0.7 on 2024-08-03 15:40 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('don_confiao', '0024_alter_product_name'), - ] - - operations = [ - migrations.CreateModel( - name='Customer', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=100)), - ('address', models.CharField(max_length=100)), - ], - ), - ] diff --git a/tienda_ilusion/don_confiao/migrations/0026_alter_sale_customer.py b/tienda_ilusion/don_confiao/migrations/0026_alter_sale_customer.py deleted file mode 100644 index cd16dd0..0000000 --- a/tienda_ilusion/don_confiao/migrations/0026_alter_sale_customer.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 5.0.7 on 2024-08-03 15:55 - -import django.db.models.deletion -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('don_confiao', '0025_customer'), - ] - - operations = [ - migrations.AlterField( - model_name='sale', - name='customer', - field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='don_confiao.customer'), - ), - ] diff --git a/tienda_ilusion/don_confiao/migrations/0027_alter_product_name.py b/tienda_ilusion/don_confiao/migrations/0027_alter_product_name.py deleted file mode 100644 index 498fb41..0000000 --- a/tienda_ilusion/don_confiao/migrations/0027_alter_product_name.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 5.0.7 on 2024-08-03 16:32 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('don_confiao', '0026_alter_sale_customer'), - ] - - operations = [ - migrations.AlterField( - model_name='product', - name='name', - field=models.CharField(max_length=100, unique=True), - ), - ] diff --git a/tienda_ilusion/don_confiao/migrations/0028_alter_customer_address.py b/tienda_ilusion/don_confiao/migrations/0028_alter_customer_address.py deleted file mode 100644 index 66d02b9..0000000 --- a/tienda_ilusion/don_confiao/migrations/0028_alter_customer_address.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 5.0.6 on 2024-08-17 14:22 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('don_confiao', '0027_alter_product_name'), - ] - - operations = [ - migrations.AlterField( - model_name='customer', - name='address', - field=models.CharField(blank=True, max_length=100, null=True), - ), - ] diff --git a/tienda_ilusion/don_confiao/migrations/0029_alter_customer_name.py b/tienda_ilusion/don_confiao/migrations/0029_alter_customer_name.py deleted file mode 100644 index dcbceb0..0000000 --- a/tienda_ilusion/don_confiao/migrations/0029_alter_customer_name.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 5.0.6 on 2024-08-17 19:28 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('don_confiao', '0028_alter_customer_address'), - ] - - operations = [ - migrations.AlterField( - model_name='customer', - name='name', - field=models.CharField(default=None, max_length=100), - ), - ] diff --git a/tienda_ilusion/don_confiao/migrations/0030_paymentsale.py b/tienda_ilusion/don_confiao/migrations/0030_paymentsale.py deleted file mode 100644 index 77d4522..0000000 --- a/tienda_ilusion/don_confiao/migrations/0030_paymentsale.py +++ /dev/null @@ -1,22 +0,0 @@ -# Generated by Django 5.0.6 on 2024-08-17 21:00 - -import django.db.models.deletion -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('don_confiao', '0029_alter_customer_name'), - ] - - operations = [ - migrations.CreateModel( - name='PaymentSale', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('payment', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='don_confiao.payment')), - ('sale', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='don_confiao.sale')), - ], - ), - ] diff --git a/tienda_ilusion/don_confiao/migrations/0031_rename_address_customer_email_customer_phone.py b/tienda_ilusion/don_confiao/migrations/0031_rename_address_customer_email_customer_phone.py deleted file mode 100644 index 43a6773..0000000 --- a/tienda_ilusion/don_confiao/migrations/0031_rename_address_customer_email_customer_phone.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 5.0.6 on 2024-10-26 22:01 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('don_confiao', '0030_paymentsale'), - ] - - operations = [ - migrations.RenameField( - model_name='customer', - old_name='address', - new_name='email', - ), - migrations.AddField( - model_name='customer', - name='phone', - field=models.CharField(blank=True, max_length=100, null=True), - ), - ] diff --git a/tienda_ilusion/don_confiao/migrations/0032_customer_address.py b/tienda_ilusion/don_confiao/migrations/0032_customer_address.py deleted file mode 100644 index 3b2bca2..0000000 --- a/tienda_ilusion/don_confiao/migrations/0032_customer_address.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 5.0.6 on 2024-10-26 22:21 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('don_confiao', '0031_rename_address_customer_email_customer_phone'), - ] - - operations = [ - migrations.AddField( - model_name='customer', - name='address', - field=models.CharField(blank=True, max_length=100, null=True), - ), - ] diff --git a/tienda_ilusion/don_confiao/migrations/0033_sale_payment_method.py b/tienda_ilusion/don_confiao/migrations/0033_sale_payment_method.py deleted file mode 100644 index 8717add..0000000 --- a/tienda_ilusion/don_confiao/migrations/0033_sale_payment_method.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 5.0.6 on 2024-11-09 17:55 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('don_confiao', '0032_customer_address'), - ] - - operations = [ - migrations.AddField( - model_name='sale', - name='payment_method', - field=models.CharField(choices=[('CASH', 'Cash'), ('CONFIAR', 'Confiar'), ('BANCOLOMBIA', 'Bancolombia')], default='CASH', max_length=30), - ), - ] diff --git a/tienda_ilusion/don_confiao/migrations/0034_alter_payment_type_payment_alter_sale_date_and_more.py b/tienda_ilusion/don_confiao/migrations/0034_alter_payment_type_payment_alter_sale_date_and_more.py deleted file mode 100644 index c6dc291..0000000 --- a/tienda_ilusion/don_confiao/migrations/0034_alter_payment_type_payment_alter_sale_date_and_more.py +++ /dev/null @@ -1,28 +0,0 @@ -# Generated by Django 5.0.6 on 2024-11-16 20:55 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('don_confiao', '0033_sale_payment_method'), - ] - - operations = [ - migrations.AlterField( - model_name='payment', - name='type_payment', - field=models.CharField(choices=[('CASH', 'Efectivo'), ('CONFIAR', 'Confiar'), ('BANCOLOMBIA', 'Bancolombia')], default='CASH', max_length=30), - ), - migrations.AlterField( - model_name='sale', - name='date', - field=models.DateTimeField(verbose_name='Date'), - ), - migrations.AlterField( - model_name='sale', - name='payment_method', - field=models.CharField(choices=[('CASH', 'Efectivo'), ('CONFIAR', 'Confiar'), ('BANCOLOMBIA', 'Bancolombia')], default='CASH', max_length=30), - ), - ] diff --git a/tienda_ilusion/don_confiao/migrations/0034_sale_reconciliation_alter_payment_type_payment_and_more.py b/tienda_ilusion/don_confiao/migrations/0034_sale_reconciliation_alter_payment_type_payment_and_more.py deleted file mode 100644 index 46d27ac..0000000 --- a/tienda_ilusion/don_confiao/migrations/0034_sale_reconciliation_alter_payment_type_payment_and_more.py +++ /dev/null @@ -1,29 +0,0 @@ -# Generated by Django 5.0.6 on 2024-11-18 03:16 - -import django.db.models.deletion -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('don_confiao', '0033_sale_payment_method'), - ] - - operations = [ - migrations.AddField( - model_name='sale', - name='reconciliation', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.RESTRICT, related_name='Sales', to='don_confiao.reconciliationjar'), - ), - migrations.AlterField( - model_name='payment', - name='type_payment', - field=models.CharField(choices=[('CASH', 'Efectivo'), ('CONFIAR', 'Confiar'), ('BANCOLOMBIA', 'Bancolombia')], default='CASH', max_length=30), - ), - migrations.AlterField( - model_name='sale', - name='payment_method', - field=models.CharField(choices=[('CASH', 'Efectivo'), ('CONFIAR', 'Confiar'), ('BANCOLOMBIA', 'Bancolombia')], default='CASH', max_length=30), - ), - ] diff --git a/tienda_ilusion/don_confiao/migrations/0035_reconciliationjar_total_cash_purchases.py b/tienda_ilusion/don_confiao/migrations/0035_reconciliationjar_total_cash_purchases.py deleted file mode 100644 index 55ba85f..0000000 --- a/tienda_ilusion/don_confiao/migrations/0035_reconciliationjar_total_cash_purchases.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 5.0.6 on 2024-12-03 02:55 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('don_confiao', '0034_sale_reconciliation_alter_payment_type_payment_and_more'), - ] - - operations = [ - migrations.AddField( - model_name='reconciliationjar', - name='total_cash_purchases', - field=models.DecimalField(decimal_places=2, default=0, max_digits=9), - preserve_default=False, - ), - ] diff --git a/tienda_ilusion/don_confiao/migrations/0036_merge_20241228_2212.py b/tienda_ilusion/don_confiao/migrations/0036_merge_20241228_2212.py deleted file mode 100644 index a1091c5..0000000 --- a/tienda_ilusion/don_confiao/migrations/0036_merge_20241228_2212.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 5.0.6 on 2024-12-28 22:12 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('don_confiao', '0034_alter_payment_type_payment_alter_sale_date_and_more'), - ('don_confiao', '0035_reconciliationjar_total_cash_purchases'), - ] - - operations = [ - ] diff --git a/tienda_ilusion/don_confiao/migrations/0037_admincode.py b/tienda_ilusion/don_confiao/migrations/0037_admincode.py deleted file mode 100644 index 1abc7b5..0000000 --- a/tienda_ilusion/don_confiao/migrations/0037_admincode.py +++ /dev/null @@ -1,20 +0,0 @@ -# Generated by Django 5.0.6 on 2025-01-11 23:52 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('don_confiao', '0036_merge_20241228_2212'), - ] - - operations = [ - migrations.CreateModel( - name='AdminCode', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('value', models.CharField(max_length=255)), - ], - ), - ] diff --git a/tienda_ilusion/don_confiao/migrations/__init__.py b/tienda_ilusion/don_confiao/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/tienda_ilusion/don_confiao/models.py b/tienda_ilusion/don_confiao/models.py deleted file mode 100644 index 032998e..0000000 --- a/tienda_ilusion/don_confiao/models.py +++ /dev/null @@ -1,204 +0,0 @@ -from django.db import models -from django.utils.translation import gettext_lazy as _ -from django.core.exceptions import ValidationError - -from decimal import Decimal -from datetime import datetime - - -class PaymentMethods(models.TextChoices): - CASH = 'CASH', _('Efectivo') - CONFIAR = 'CONFIAR', _('Confiar') - BANCOLOMBIA = 'BANCOLOMBIA', _('Bancolombia') - - -class Customer(models.Model): - name = models.CharField(max_length=100, default=None, null=False, blank=False) - address = models.CharField(max_length=100, null=True, blank=True) - email = models.CharField(max_length=100, null=True, blank=True) - phone = models.CharField(max_length=100, null=True, blank=True) - - def __str__(self): - return self.name - - -class MeasuringUnits(models.TextChoices): - UNIT = 'UNIT', _('Unit') - - -class ProductCategory(models.Model): - name = models.CharField(max_length=100, unique=True) - - def __str__(self): - return self.name - - -class Product(models.Model): - name = models.CharField(max_length=100, unique=True) - price = models.DecimalField(max_digits=9, decimal_places=2) - measuring_unit = models.CharField( - max_length=20, - choices=MeasuringUnits.choices, - default=MeasuringUnits.UNIT - ) - categories = models.ManyToManyField(ProductCategory) - - def __str__(self): - return self.name - - @classmethod - def to_list(cls): - products_list = [] - all_products = cls.objects.all() - for product in all_products: - rproduct = { - "id": product.id, - "name": product.name, - "price_list": product.price, - "uom": product.measuring_unit, - "categories": [c.name for c in product.categories.all()] - } - products_list.append(rproduct) - return products_list - - -class ReconciliationJar(models.Model): - is_valid = models.BooleanField(default=False) - date_time = models.DateTimeField() - description = models.CharField(max_length=255, null=True, blank=True) - reconcilier = models.CharField(max_length=255, null=False, blank=False) - cash_taken = models.DecimalField(max_digits=9, decimal_places=2) - cash_discrepancy = models.DecimalField(max_digits=9, decimal_places=2) - total_cash_purchases = models.DecimalField(max_digits=9, decimal_places=2) - - def clean(self): - self._validate_taken_ammount() - - def add_payments(self, payments): - for payment in payments: - self.payment_set.add(payment) - self.is_valid = True - - def _validate_taken_ammount(self): - ammount_cash = self.cash_taken + self.cash_discrepancy - if not self.total_cash_purchases == ammount_cash: - raise ValidationError( - {"cash_taken": _("The taken ammount has discrepancy.")} - ) - - -class Sale(models.Model): - customer = models.ForeignKey(Customer, on_delete=models.PROTECT) - date = models.DateTimeField("Date") - phone = models.CharField(max_length=13, null=True, blank=True) - description = models.CharField(max_length=255, null=True, blank=True) - payment_method = models.CharField( - max_length=30, - choices=PaymentMethods.choices, - default=PaymentMethods.CASH, - blank=False, - null=False - ) - reconciliation = models.ForeignKey( - ReconciliationJar, - on_delete=models.RESTRICT, - related_name='Sales', - null=True - ) - - def __str__(self): - return f"{self.date} {self.customer}" - - def get_total(self): - lines = self.saleline_set.all() - return sum([l.quantity * l.unit_price for l in lines]) - - def clean(self): - if self.payment_method not in PaymentMethods.values: - raise ValidationError({'payment_method': "Invalid payment method"}) - - @classmethod - def sale_header_csv(cls): - sale_header_csv = [field.name for field in cls._meta.fields] - - return sale_header_csv - - -class SaleLine(models.Model): - - sale = models.ForeignKey(Sale, on_delete=models.CASCADE) - product = models.ForeignKey(Product, null=False, blank=False, on_delete=models.CASCADE) - quantity = models.IntegerField(null=True) - unit_price = models.DecimalField(max_digits=9, decimal_places=2) - description = models.CharField(max_length=255, null=True, blank=True) - - def __str__(self): - return f"{self.sale} - {self.product}" - - -class ReconciliationJarSummary(): - def __init__(self, payments): - self._validate_payments(payments) - self._payments = payments - - def _validate_payments(self, payments): - pass - - @property - def total(self): - return sum([p.amount for p in self.payments]) - - @property - def payments(self): - return self._payments - - -class Payment(models.Model): - date_time = models.DateTimeField() - type_payment = models.CharField( - max_length=30, - choices=PaymentMethods.choices, - default=PaymentMethods.CASH - ) - amount = models.DecimalField(max_digits=9, decimal_places=2) - reconciliation_jar = models.ForeignKey( - ReconciliationJar, - null=True, - default=None, - blank=True, - on_delete=models.RESTRICT - ) - description = models.CharField(max_length=255, null=True, blank=True) - - @classmethod - def get_reconciliation_jar_summary(cls): - return ReconciliationJarSummary( - cls.objects.filter( - type_payment=PaymentMethods.CASH, - reconciliation_jar=None - ) - ) - - @classmethod - def total_payment_from_sale(cls, payment_method, sale): - payment = cls() - payment.date_time = datetime.today() - payment.type_payment = payment_method - payment.amount = sale.get_total() - payment.clean() - payment.save() - - payment_sale = PaymentSale() - payment_sale.payment = payment - payment_sale.sale = sale - payment_sale.clean() - payment_sale.save() - - -class PaymentSale(models.Model): - payment = models.ForeignKey(Payment, on_delete=models.CASCADE) - sale = models.ForeignKey(Sale, on_delete=models.CASCADE) - - -class AdminCode(models.Model): - value = models.CharField(max_length=255, null=False, blank=False) diff --git a/tienda_ilusion/don_confiao/serializers.py b/tienda_ilusion/don_confiao/serializers.py deleted file mode 100644 index 8c68dd4..0000000 --- a/tienda_ilusion/don_confiao/serializers.py +++ /dev/null @@ -1,103 +0,0 @@ -from rest_framework import serializers - -from .models import Sale, SaleLine, Product, Customer, ReconciliationJar - - -class SaleLineSerializer(serializers.ModelSerializer): - class Meta: - model = SaleLine - fields = ['id', 'sale', 'product', 'unit_price', 'quantity'] - - -class SaleSerializer(serializers.ModelSerializer): - total = serializers.ReadOnlyField(source='get_total') - - class Meta: - model = Sale - fields = ['id', 'customer', 'date', 'saleline_set', - 'total', 'payment_method'] - - -class ProductSerializer(serializers.ModelSerializer): - class Meta: - model = Product - fields = ['id', 'name', 'price', 'measuring_unit', 'categories'] - - -class CustomerSerializer(serializers.ModelSerializer): - class Meta: - model = Customer - fields = ['id', 'name', 'address', 'email', 'phone'] - - -class ReconciliationJarSerializer(serializers.ModelSerializer): - Sales = SaleSerializer(many=True, read_only=True) - - class Meta: - model = ReconciliationJar - fields = [ - 'id', - 'date_time', - 'reconcilier', - 'cash_taken', - 'cash_discrepancy', - 'total_cash_purchases', - 'Sales', - ] - - -class PaymentMethodSerializer(serializers.Serializer): - text = serializers.CharField() - value = serializers.CharField() - - def to_representation(self, instance): - return { - 'text': instance[1], - 'value': instance[0], - } - - -class SaleForRenconciliationSerializer(serializers.Serializer): - id = serializers.IntegerField() - date = serializers.DateTimeField() - payment_method = serializers.CharField() - customer = serializers.SerializerMethodField() - total = serializers.SerializerMethodField() - - def get_customer(self, sale): - return { - 'id': sale.customer.id, - 'name': sale.customer.name, - } - - def get_total(self, sale): - return sale.get_total() - - -class ListCustomerSerializer(serializers.ModelSerializer): - class Meta: - model = Customer - fields = ['id', 'name'] - - -class ListProductSerializer(serializers.ModelSerializer): - class Meta: - model = Product - fields = ['id', 'name'] - - -class SummarySaleLineSerializer(serializers.ModelSerializer): - product = ListProductSerializer() - - class Meta: - model = SaleLine - fields = ['product', 'quantity', 'unit_price', 'description'] - - -class SaleSummarySerializer(serializers.ModelSerializer): - customer = ListCustomerSerializer() - lines = SummarySaleLineSerializer(many=True, source='saleline_set') - - class Meta: - model = Sale - fields = ['id', 'date', 'customer', 'payment_method', 'lines'] diff --git a/tienda_ilusion/don_confiao/static/css/main_menu.css b/tienda_ilusion/don_confiao/static/css/main_menu.css deleted file mode 100644 index 7241d01..0000000 --- a/tienda_ilusion/don_confiao/static/css/main_menu.css +++ /dev/null @@ -1,37 +0,0 @@ -nav#main_menu a { - text-decoration: none; - font-weight: bold; - color: white; - background-color: #178E79 ; - padding: 10px 20px; - min-width: 90%; - text-align: center; - border: solid #178E79 4px; - border-radius: 5px; - cursor: pointer; -} - -nav#main_menu a:hover { - transition: ease-in-out 0.2s; - background-color: #7BDCB5; - color: #178E79; -} - -nav#main_menu a:active { - background-color: #aaa; - color: #444; -} - -nav#main_menu { - display: inline; -} - -li{ - width: 100%; - display: flex; - justify-content: center; -} - -.page_title { - color: #04A1E4 -} diff --git a/tienda_ilusion/don_confiao/static/img/recreo_logo.png b/tienda_ilusion/don_confiao/static/img/recreo_logo.png deleted file mode 100644 index 48a13e0..0000000 Binary files a/tienda_ilusion/don_confiao/static/img/recreo_logo.png and /dev/null differ diff --git a/tienda_ilusion/don_confiao/static/js/add_line.js b/tienda_ilusion/don_confiao/static/js/add_line.js deleted file mode 100644 index ab448ff..0000000 --- a/tienda_ilusion/don_confiao/static/js/add_line.js +++ /dev/null @@ -1,30 +0,0 @@ -document.addEventListener('DOMContentLoaded', function(){ - var button = document.getElementById('add_line'); - var formContainer = document.getElementById('formset-container'); - var totalForms = document.getElementById('id_saleline_set-TOTAL_FORMS'); - button.addEventListener('click', function(){ - var newForm = formContainer.querySelector('.form-container').cloneNode(true); - var formCount = parseInt(totalForms.value); - var regex = new RegExp('__prefix__', 'g'); - newForm.innerHTML = newForm.innerHTML.replace(regex, formCount); - - var fields = newForm.querySelectorAll('[id^="id_saleline_set-"], [name^="saleline_set-"]'); - fields.forEach(function(field) { - var oldId = field.id; - var oldName = field.name; - - if (oldId) { - var newId = oldId.replace(/-\d+-/, '-' + formCount + '-'); - field.id = newId; - } - if (oldName) { - var newName = oldName.replace(/-\d+-/, '-' + formCount + '-'); - field.name = newName; - } - }); - - formContainer.appendChild(newForm); - totalForms.value = formCount + 1; - setPriceListeners(); - }); -}); diff --git a/tienda_ilusion/don_confiao/static/js/buy_general.js b/tienda_ilusion/don_confiao/static/js/buy_general.js deleted file mode 100644 index db2a719..0000000 --- a/tienda_ilusion/don_confiao/static/js/buy_general.js +++ /dev/null @@ -1,22 +0,0 @@ -setPriceListeners(); - -function setPriceListeners() { - document.querySelectorAll('select[id^="id_saleline_set-"][id$="-product"]').forEach((input) => { - input.addEventListener('change', (e) => setLinePrice(e)); - }); -} - -function setLinePrice(e) { - let input = e.target; - const idLine = input.id.split('-')[1]; - const productId = input.value; - const priceInput = document.getElementById(`id_saleline_set-${idLine}-unit_price`); - - const product = listProducts.find((product) => product.id == productId); - if (product) { - priceInput.value = product.price_list; - } else { - priceInput.value = ''; - } -} - diff --git a/tienda_ilusion/don_confiao/static/js/calculate_subtotal_line.js b/tienda_ilusion/don_confiao/static/js/calculate_subtotal_line.js deleted file mode 100644 index 6f10690..0000000 --- a/tienda_ilusion/don_confiao/static/js/calculate_subtotal_line.js +++ /dev/null @@ -1,50 +0,0 @@ -const quantity_lineRegexSelector = `[id^="${idPrefix}"][id$="${quantitySuffix}"]`; -const price_lineRegexSelector = `[id^="${idPrefix}"][id$="${priceSuffix}"]`; - -function insertSubtotalField() { - // Selecciona la fila de precio unitario para añadir la fila del subtotal después de ella - const unitPriceRow = document.querySelector('input[id="id_saleline_set-0-unit_price"]').closest('tr'); - - // Crear una nueva fila para el subtotal - const subtotalRow = document.createElement('tr'); - subtotalRow.innerHTML = ` - - - `; - - // Insertar la fila del subtotal después de la fila del precio unitario - unitPriceRow.after(subtotalRow); - } - -function calculateSubtotal(id) { - const quantityElement = document.getElementById(`id_saleline_set-${id}-quantity`); - const unitPriceElement = document.getElementById(`id_saleline_set-${id}-unit_price`); - const subtotalElement = document.getElementById(`id_saleline_set-${id}-subtotal`); - - const quantity = parseFloat(quantityElement.value) || 0; - const unitPrice = parseFloat(unitPriceElement.value) || 0; - const subtotal = quantity * unitPrice; - - subtotalElement.value = subtotal.toFixed(2); - } - - // Inserta el campo subtotal al cargar la página - window.addEventListener('load', () => { - insertSubtotalField(); - - complete_form.addEventListener('change', function(event){ - const quantityInputs = document.querySelectorAll(quantity_lineRegexSelector); - const ids = Array.prototype.map.call(quantityInputs, function(input) { - return input.id.match(/\d+/)[0]; - }); - - ids.forEach(function(id) { - if (event.target.matches(quantity_lineRegexSelector)) { - calculateSubtotal(id); - } - if (event.target.matches(price_lineRegexSelector)) { - calculateSubtotal(id); - } - }) - }); - }); diff --git a/tienda_ilusion/don_confiao/static/js/sale_summary.js b/tienda_ilusion/don_confiao/static/js/sale_summary.js deleted file mode 100644 index 5545163..0000000 --- a/tienda_ilusion/don_confiao/static/js/sale_summary.js +++ /dev/null @@ -1,37 +0,0 @@ -const complete_form = document.getElementById('complete_form_purchase') -const quantityLines = document.getElementById('id_quantity_lines'); -const quantityProducts = document.getElementById('id_quantity_products'); -const ammountInput = document.getElementById('id_ammount'); -const idPrefix = 'id_saleline_set-'; -const quantitySuffix = '-quantity'; -const priceSuffix = '-unit_price'; -const quantityRegexSelector = `[id^="${idPrefix}"][id$="${quantitySuffix}"]`; -const priceRegexSelector = `[id^="${idPrefix}"][id$="${priceSuffix}"]`; - -complete_form.addEventListener('change', function(event){ - if (event.target.matches(quantityRegexSelector)) { - calculateSummary(); - } - if (event.target.matches(priceRegexSelector)) { - calculateSummary(); - } -}); - - -function calculateSummary() { - let quantity = 0; - let ammount = 0; - const quantityInputs = document.querySelectorAll(quantityRegexSelector); - const ids = Array.prototype.map.call(quantityInputs, function(input) { - return input.id.match(/\d+/)[0]; - }); - ids.forEach(function(id) { - let lineQuantity = document.getElementById(`${idPrefix}${id}${quantitySuffix}`) - let linePrice = document.getElementById(`${idPrefix}${id}${priceSuffix}`) - quantity += parseFloat(lineQuantity.value); - ammount += parseFloat(linePrice.value) * parseFloat(lineQuantity.value); - }); - quantityProducts.value = quantity; - quantityLines.value = quantityInputs.length; - ammountInput.value = ammount; -} diff --git a/tienda_ilusion/don_confiao/templates/don_confiao/base.html b/tienda_ilusion/don_confiao/templates/don_confiao/base.html deleted file mode 100644 index f7a1a77..0000000 --- a/tienda_ilusion/don_confiao/templates/don_confiao/base.html +++ /dev/null @@ -1,17 +0,0 @@ -{% load static %} - - - - - Don Confiao - Tienda la Ilusión - - - -
- {% block content %} {% endblock %} -
- - - diff --git a/tienda_ilusion/don_confiao/templates/don_confiao/import_customers.html b/tienda_ilusion/don_confiao/templates/don_confiao/import_customers.html deleted file mode 100644 index 3c9d1f9..0000000 --- a/tienda_ilusion/don_confiao/templates/don_confiao/import_customers.html +++ /dev/null @@ -1,13 +0,0 @@ -{% extends 'don_confiao/base.html' %} -{% block content %} -{% if form.is_multipart %} -
-{% else %} - -{% endif %} - -{% csrf_token %} -{{ form }} - -
-{% endblock %} diff --git a/tienda_ilusion/don_confiao/templates/don_confiao/import_products.html b/tienda_ilusion/don_confiao/templates/don_confiao/import_products.html deleted file mode 100644 index 3c9d1f9..0000000 --- a/tienda_ilusion/don_confiao/templates/don_confiao/import_products.html +++ /dev/null @@ -1,13 +0,0 @@ -{% extends 'don_confiao/base.html' %} -{% block content %} -{% if form.is_multipart %} -
-{% else %} - -{% endif %} - -{% csrf_token %} -{{ form }} - -
-{% endblock %} diff --git a/tienda_ilusion/don_confiao/templates/don_confiao/index.html b/tienda_ilusion/don_confiao/templates/don_confiao/index.html deleted file mode 100644 index 176a2aa..0000000 --- a/tienda_ilusion/don_confiao/templates/don_confiao/index.html +++ /dev/null @@ -1,8 +0,0 @@ -

Tienda la Ilusión

-

Don Confiao

- diff --git a/tienda_ilusion/don_confiao/templates/don_confiao/menu.html b/tienda_ilusion/don_confiao/templates/don_confiao/menu.html deleted file mode 100644 index 7b60ddc..0000000 --- a/tienda_ilusion/don_confiao/templates/don_confiao/menu.html +++ /dev/null @@ -1,17 +0,0 @@ -{% load static %} - - -
- Recreo - -

Don Confiao - Tienda la Ilusión

-
- diff --git a/tienda_ilusion/don_confiao/templates/don_confiao/product_list.html b/tienda_ilusion/don_confiao/templates/don_confiao/product_list.html deleted file mode 100644 index d9dbcfd..0000000 --- a/tienda_ilusion/don_confiao/templates/don_confiao/product_list.html +++ /dev/null @@ -1,14 +0,0 @@ -{% extends 'don_confiao/base.html' %} -{% block content %} -
- - - -
-

Lista de productos

- -{% endblock %} diff --git a/tienda_ilusion/don_confiao/templates/don_confiao/purchase.html b/tienda_ilusion/don_confiao/templates/don_confiao/purchase.html deleted file mode 100644 index 359ae76..0000000 --- a/tienda_ilusion/don_confiao/templates/don_confiao/purchase.html +++ /dev/null @@ -1,39 +0,0 @@ -{% extends 'don_confiao/base.html' %} -{% block content %} -{% load static %} - -
-
-
- {% csrf_token %} - {{ linea_formset.management_form }} -
- {% for form in linea_formset %} -
- - {{ form.as_table }} -
-
- {% endfor %} -
-
- -
-
-
-

Resumen de Venta

- {{ sale_form }} - {{ summary_form }} - -
- -
- - - - - - -{% endblock %} diff --git a/tienda_ilusion/don_confiao/templates/don_confiao/purchase_summary.html b/tienda_ilusion/don_confiao/templates/don_confiao/purchase_summary.html deleted file mode 100644 index b3af74f..0000000 --- a/tienda_ilusion/don_confiao/templates/don_confiao/purchase_summary.html +++ /dev/null @@ -1,12 +0,0 @@ -{% extends 'don_confiao/base.html' %} -{% block content %} - -

Resumen de compra

-
-
Date
{{ purchase.date }}
-
ID
{{ purchase.id }}
-
Customer
{{ purchase.customer.name }}
-
Total
{{ purchase.get_total }}
-
- -{% endblock %} diff --git a/tienda_ilusion/don_confiao/templates/don_confiao/purchases.html b/tienda_ilusion/don_confiao/templates/don_confiao/purchases.html deleted file mode 100644 index c00c823..0000000 --- a/tienda_ilusion/don_confiao/templates/don_confiao/purchases.html +++ /dev/null @@ -1,14 +0,0 @@ -{% extends 'don_confiao/base.html' %} -{% block content %} - -{% if purchases %} - -{% else %} -

No hay Compras

-{% endif %} - -{% endblock %} diff --git a/tienda_ilusion/don_confiao/tests/Fixtures/sales_fixture.json b/tienda_ilusion/don_confiao/tests/Fixtures/sales_fixture.json deleted file mode 100644 index 788d336..0000000 --- a/tienda_ilusion/don_confiao/tests/Fixtures/sales_fixture.json +++ /dev/null @@ -1,47 +0,0 @@ -[ - { - "model": "don_confiao.customer", - "pk": 1, - "fields": { - "name": "Alejandro Fernandez", - "address": "Avenida Siempre Viva" - } - }, - { - "model": "don_confiao.productcategory", - "pk": 1, - "fields": { - "name": "Unidad" - } - }, - { - "model": "don_confiao.product", - "pk": 1, - "fields": { - "name": "Papaya", - "price": 2500, - "measuring_unit": "Unidad" - } - }, - { - "model": "don_confiao.sale", - "pk": 1, - "fields": { - "customer": 1, - "date": "2024-08-31", - "phone": 312201103, - "description": "Primera Venta" - } - }, - { - "model": "don_confiao.saleline", - "pk": 1, - "fields": { - "sale": 1, - "product": 1, - "quantity": 10, - "unit_price": 5000, - "description": "Primer Sale Line" - } - } -] diff --git a/tienda_ilusion/don_confiao/tests/__init__.py b/tienda_ilusion/don_confiao/tests/__init__.py deleted file mode 100644 index e5a0d9b..0000000 --- a/tienda_ilusion/don_confiao/tests/__init__.py +++ /dev/null @@ -1 +0,0 @@ -#!/usr/bin/env python3 diff --git a/tienda_ilusion/don_confiao/tests/test_admin_code.py b/tienda_ilusion/don_confiao/tests/test_admin_code.py deleted file mode 100644 index 87194f0..0000000 --- a/tienda_ilusion/don_confiao/tests/test_admin_code.py +++ /dev/null @@ -1,41 +0,0 @@ -from django.test import TestCase, Client - -from ..models import AdminCode - -import json - - -class TestAdminCode(TestCase): - def setUp(self): - self.valid_code = 'some valid code' - admin_code = AdminCode() - admin_code.value = self.valid_code - admin_code.clean() - admin_code.save() - - self.client = Client() - - def test_validate_code(self): - url = '/don_confiao/api/admin_code/validate/' + self.valid_code - response = self.client.get(url) - self.assertEqual(response.status_code, 200) - - content = json.loads(response.content.decode('utf-8')) - self.assertTrue(content['validCode']) - - def test_invalid_code(self): - invalid_code = 'some invalid code' - url = '/don_confiao/api/admin_code/validate/' + invalid_code - - response = self.client.get(url) - self.assertEqual(response.status_code, 200) - - content = json.loads(response.content.decode('utf-8')) - self.assertFalse(content['validCode']) - - def test_empty_code(self): - empty_code = '' - url = '/don_confiao/api/admin_code/validate/' + empty_code - - response = self.client.get(url) - self.assertEqual(response.status_code, 404) diff --git a/tienda_ilusion/don_confiao/tests/test_api.py b/tienda_ilusion/don_confiao/tests/test_api.py deleted file mode 100644 index da9910b..0000000 --- a/tienda_ilusion/don_confiao/tests/test_api.py +++ /dev/null @@ -1,59 +0,0 @@ -import json -from django.urls import reverse -from rest_framework import status -from rest_framework.test import APITestCase -from ..models import Sale, Product, Customer - - -class TestAPI(APITestCase): - def setUp(self): - self.product = Product.objects.create( - name='Panela', - price=5000, - measuring_unit='UNIT' - ) - self.customer = Customer.objects.create( - name='Camilo' - ) - - def test_create_sale(self): - response = self._create_sale() - content = json.loads(response.content.decode('utf-8')) - self.assertEqual(response.status_code, status.HTTP_201_CREATED) - self.assertEqual(Sale.objects.count(), 1) - sale = Sale.objects.all()[0] - self.assertEqual( - sale.customer.name, - self.customer.name - ) - self.assertEqual( - sale.id, - content['id'] - ) - - def test_get_products(self): - url = '/don_confiao/api/products/' - response = self.client.get(url) - json_response = json.loads(response.content.decode('utf-8')) - self.assertEqual(response.status_code, 200) - self.assertEqual(self.product.name, json_response[0]['name']) - - def test_get_customers(self): - url = '/don_confiao/api/customers/' - response = self.client.get(url) - json_response = json.loads(response.content.decode('utf-8')) - self.assertEqual(response.status_code, 200) - self.assertEqual(self.customer.name, json_response[0]['name']) - - def _create_sale(self): - url = '/don_confiao/api/sales/' - data = { - 'customer': self.customer.id, - 'date': '2024-09-02', - 'payment_method': 'CASH', - 'saleline_set': [ - {'product': self.product.id, 'quantity': 2, 'unit_price': 3000}, - {'product': self.product.id, 'quantity': 3, 'unit_price': 5000} - ], - } - return self.client.post(url, data, format='json') diff --git a/tienda_ilusion/don_confiao/tests/test_buy_form.py b/tienda_ilusion/don_confiao/tests/test_buy_form.py deleted file mode 100644 index 5a61817..0000000 --- a/tienda_ilusion/don_confiao/tests/test_buy_form.py +++ /dev/null @@ -1,22 +0,0 @@ -from django.test import Client, TestCase -from ..models import Product - - -class TestBuyForm(TestCase): - def setUp(self): - self.client = Client() - self.product = Product() - self.product.name = "Arroz" - self.product.price = 5000 - self.product.save() - - def test_buy_contains_products_list(self): - response = self.client.get('/don_confiao/comprar') - self.assertIn( - self.product.name, - response.context['list_products'] - ) - content = response.content.decode('utf-8') - self.assertIn('5000', content) - self.assertIn('Arroz', content) - self.assertIn(str(self.product.id), content) diff --git a/tienda_ilusion/don_confiao/tests/test_export_sales.py b/tienda_ilusion/don_confiao/tests/test_export_sales.py deleted file mode 100644 index 9dc050f..0000000 --- a/tienda_ilusion/don_confiao/tests/test_export_sales.py +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env python3 -from django.test import Client, TestCase -from io import StringIO -import csv - - -class TestExportSales(TestCase): - fixtures = ['sales_fixture'] - - def setUp(self): - self.client = Client() - - def test_export_sales(self): - sales_response = self._export_sales_csv() - filename = sales_response.headers[ - 'Content-Disposition'].split('; ')[1].strip('filename=').strip("'") - content = sales_response.content - content_str = content.decode('utf-8') - csv_file = StringIO(content_str) - header = next(csv.reader(csv_file)) - - self.assertGreater(len(content), 0) - self.assertEqual(filename, 'sales.csv') - self.assertEqual(sales_response.headers['Content-Type'], 'text/csv') - self.assertEqual(header, self._tryton_sale_header()) - - def _export_sales_csv(self): - return self.client.get("/don_confiao/exportar_ventas_para_tryton") - - def _tryton_sale_header(self): - return [ - "Tercero", - "Dirección de facturación", - "Dirección de envío", - "Descripción", - "Referencia", - "Fecha venta", - "Plazo de pago", - "Almacén", - "Moneda", - "Líneas/Producto", - "Líneas/Cantidad", - "Líneas/Precio unitario", - "Líneas/Unidad", - "Empresa", - "Tienda", - "Terminal de venta", - "Autorecogida", - "Comentario" - ] diff --git a/tienda_ilusion/don_confiao/tests/test_jar_reconciliation.py b/tienda_ilusion/don_confiao/tests/test_jar_reconciliation.py deleted file mode 100644 index 9efb15d..0000000 --- a/tienda_ilusion/don_confiao/tests/test_jar_reconciliation.py +++ /dev/null @@ -1,264 +0,0 @@ -from django.test import TestCase, Client -from django.core.exceptions import ValidationError -from ..models import Sale, Product, SaleLine, Customer, ReconciliationJar - -import json - - -class TestJarReconcliation(TestCase): - def setUp(self): - customer = Customer() - customer.name = 'Alejo Mono' - customer.save() - - self.client = Client() - - purchase = Sale() - purchase.customer = customer - purchase.date = "2024-07-30" - purchase.payment_method = 'CASH' - purchase.clean() - purchase.save() - - product = Product() - product.name = "cafe" - product.price = "72500" - product.save() - - line = SaleLine() - line.sale = purchase - line.product = product - line.quantity = "11" - line.unit_price = "72500" - line.save() - self.purchase = purchase - - purchase2 = Sale() - purchase2.customer = customer - purchase2.date = "2024-07-30" - purchase.payment_method = 'CASH' - purchase2.clean() - purchase2.save() - - line2 = SaleLine() - line2.sale = purchase2 - line2.product = product - line2.quantity = "27" - line2.unit_price = "72500" - line2.save() - self.purchase2 = purchase2 - - purchase3 = Sale() - purchase3.customer = customer - purchase3.date = "2024-07-30" - purchase3.payment_method = 'CASH' - purchase3.clean() - purchase3.save() - - line3 = SaleLine() - line3.sale = purchase3 - line3.product = product - line3.quantity = "37" - line3.unit_price = "72500" - line3.save() - self.purchase3 = purchase3 - - purchase4 = Sale() - purchase4.customer = customer - purchase4.date = "2024-07-30" - purchase4.payment_method = 'CONFIAR' - purchase4.clean() - purchase4.save() - - line4 = SaleLine() - line4.sale = purchase4 - line4.product = product - line4.quantity = "47" - line4.unit_price = "72500" - line4.save() - self.purchase4 = purchase4 - - def test_create_reconciliation_jar(self): - reconciliation = self._create_simple_reconciliation() - self.assertTrue(isinstance(reconciliation, ReconciliationJar)) - - def test_get_purchases_for_reconciliation(self): - # link purchase to reconciliation to exclude from list - reconciliation = self._create_simple_reconciliation() - self.purchase3.reconciliation = reconciliation - self.purchase3.clean() - self.purchase3.save() - - url = '/don_confiao/purchases/for_reconciliation' - response = self.client.get(url) - self.assertEqual(response.status_code, 200) - - rawContent = response.content.decode('utf-8') - content = json.loads(rawContent) - - self.assertIn('CASH', content.keys()) - self.assertIn('CONFIAR', content.keys()) - self.assertEqual(2, len(content.get('CASH'))) - self.assertEqual(1, len(content.get('CONFIAR'))) - self.assertNotIn(str(37*72500), rawContent) - self.assertIn(str(47*72500), rawContent) - - def test_don_create_reconcialiation_with_bad_numbers(self): - reconciliation = ReconciliationJar() - reconciliation.date_time = "2024-07-30" - reconciliation.total_cash_purchases = 145000 - reconciliation.cash_taken = 143000 - reconciliation.cash_discrepancy = 1000 - with self.assertRaises(ValidationError): - reconciliation.clean() - reconciliation.save() - - def test_fail_create_reconciliation_with_wrong_total_purchases_purchases(self): - url = '/don_confiao/reconciliate_jar' - total_purchases = (11 * 72500) + (27 * 72500) - bad_total_purchases = total_purchases + 2 - data = { - 'date_time': '2024-12-02T21:07', - 'reconcilier': 'carlos', - 'total_cash_purchases': bad_total_purchases, - 'cash_taken': total_purchases, - 'cash_discrepancy': 0, - 'cash_purchases': [ - self.purchase.id, - self.purchase2.id, - self.purchase.id, - ], - } - response = self.client.post(url, data=json.dumps(data).encode('utf-8'), - content_type='application/json') - rawContent = response.content.decode('utf-8') - content = json.loads(rawContent) - - self.assertEqual(response.status_code, 400) - self.assertIn('error', content) - self.assertIn('total_cash_purchases', content['error']) - - def test_create_reconciliation_with_purchases(self): - response = self._create_reconciliation_with_purchase() - - rawContent = response.content.decode('utf-8') - content = json.loads(rawContent) - - self.assertEqual(response.status_code, 200) - self.assertIn('id', content) - - purchases = Sale.objects.filter(reconciliation_id=content['id']) - self.assertEqual(len(purchases), 2) - - def test_create_reconciliation_with_purchases_and_other_totals(self): - url = '/don_confiao/reconciliate_jar' - total_purchases = (11 * 72500) + (27 * 72500) - data = { - 'date_time': '2024-12-02T21:07', - 'reconcilier': 'carlos', - 'total_cash_purchases': total_purchases, - 'cash_taken': total_purchases, - 'cash_discrepancy': 0, - 'cash_purchases': [ - self.purchase.id, - self.purchase2.id, - ], - 'other_totals': { - 'Confiar': { - 'total': (47 * 72500) + 1, - 'purchases': [self.purchase4.id], - }, - }, - } - response = self.client.post(url, data=json.dumps(data).encode('utf-8'), - content_type='application/json') - - rawContent = response.content.decode('utf-8') - content = json.loads(rawContent) - - self.assertEqual(response.status_code, 200) - self.assertIn('id', content) - - purchases = Sale.objects.filter(reconciliation_id=content['id']) - self.assertEqual(len(purchases), 3) - - def test_list_reconciliations(self): - self._create_simple_reconciliation() - self._create_simple_reconciliation() - - url = '/don_confiao/api/reconciliate_jar/' - - response = self.client.get(url) - self.assertEqual(response.status_code, 200) - - content = json.loads(response.content.decode('utf-8')) - self.assertEqual(2, content['count']) - self.assertEqual(2, len(content['results'])) - self.assertEqual('2024-07-30T00:00:00Z', - content['results'][0]['date_time']) - - def test_list_reconciliations_pagination(self): - self._create_simple_reconciliation() - self._create_simple_reconciliation() - - url = '/don_confiao/api/reconciliate_jar/?page=2&page_size=1' - - response = self.client.get(url) - self.assertEqual(response.status_code, 200) - - content = json.loads(response.content.decode('utf-8')) - self.assertEqual(1, len(content['results'])) - self.assertEqual('2024-07-30T00:00:00Z', - content['results'][0]['date_time']) - - def test_get_single_reconciliation(self): - createResponse = self._create_reconciliation_with_purchase() - reconciliationId = json.loads( - createResponse.content.decode('utf-8') - )['id'] - self.assertGreater(reconciliationId, 0) - - url = f'/don_confiao/api/reconciliate_jar/{reconciliationId}/' - response = self.client.get(url, content_type='application/json') - content = json.loads( - response.content.decode('utf-8') - ) - self.assertEqual(reconciliationId, content['id']) - self.assertGreater(len(content['Sales']), 0) - self.assertIn( - self.purchase.id, - [sale['id'] for sale in content['Sales']] - ) - - self.assertIn( - 'CASH', - [sale['payment_method'] for sale in content['Sales']] - ) - - def _create_simple_reconciliation(self): - reconciliation = ReconciliationJar() - reconciliation.date_time = "2024-07-30" - reconciliation.total_cash_purchases = 0 - reconciliation.cash_taken = 0 - reconciliation.cash_discrepancy = 0 - reconciliation.clean() - reconciliation.save() - return reconciliation - - def _create_reconciliation_with_purchase(self): - url = '/don_confiao/reconciliate_jar' - total_purchases = (11 * 72500) + (27 * 72500) - data = { - 'date_time': '2024-12-02T21:07', - 'reconcilier': 'carlos', - 'total_cash_purchases': total_purchases, - 'cash_taken': total_purchases, - 'cash_discrepancy': 0, - 'cash_purchases': [ - self.purchase.id, - self.purchase2.id, - self.purchase.id, - ], - } - return self.client.post(url, data=json.dumps(data).encode('utf-8'), - content_type='application/json') diff --git a/tienda_ilusion/don_confiao/tests/test_party.py b/tienda_ilusion/don_confiao/tests/test_party.py deleted file mode 100644 index 25d78e2..0000000 --- a/tienda_ilusion/don_confiao/tests/test_party.py +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env python3 -from django.test import TestCase -from django.db.utils import IntegrityError - -from ..models import Customer - - -class TestCustomer(TestCase): - - def test_create_customer(self): - customer = Customer() - customer.name = "Don Confiado Gonzalez" - customer.address = "Pueblo Bonito" - customer.save() - - self.assertIsInstance(customer, Customer) - - def test_don_create_customer_without_name(self): - customer = Customer() - with self.assertRaises(IntegrityError): - customer.save() diff --git a/tienda_ilusion/don_confiao/tests/test_payment_methods.py b/tienda_ilusion/don_confiao/tests/test_payment_methods.py deleted file mode 100644 index 4fa504d..0000000 --- a/tienda_ilusion/don_confiao/tests/test_payment_methods.py +++ /dev/null @@ -1,23 +0,0 @@ -from django.test import Client, TestCase - -# from ..models import PaymentMethods - -class TestPaymentMethods(TestCase): - def setUp(self): - self.client = Client() - - def test_keys_in_payment_methods_to_select(self): - response = self.client.get( - '/don_confiao/payment_methods/all/select_format' - ) - methods = response.json() - for method in methods: - self.assertEqual(set(method.keys()), {'text', 'value'}) - - def test_basic_payment_methods_to_select(self): - methods = self.client.get( - '/don_confiao/payment_methods/all/select_format' - ).json() - self.assertIn('CASH', [method.get('value') for method in methods]) - self.assertIn('CONFIAR', [method.get('value') for method in methods]) - self.assertIn('BANCOLOMBIA', [method.get('value') for method in methods]) diff --git a/tienda_ilusion/don_confiao/tests/test_products.py b/tienda_ilusion/don_confiao/tests/test_products.py deleted file mode 100644 index 0c12f74..0000000 --- a/tienda_ilusion/don_confiao/tests/test_products.py +++ /dev/null @@ -1,104 +0,0 @@ -from django.test import Client, TestCase -from django.conf import settings -from ..models import ProductCategory, Product - -import os -import json - - -class TestProducts(TestCase): - def setUp(self): - self.client = Client() - - def test_import_products(self): - self._import_csv() - all_products = self._get_products() - self.assertEqual( - len(all_products), - 3 - ) - - def test_import_products_with_categories(self): - self._import_csv() - all_products = self._get_products() - self.assertIn("Aceites", all_products[0]["categories"]) - - def test_don_repeat_categories_on_import(self): - self._import_csv() - categories_on_csv = ["Cafes", "Alimentos", "Aceites"] - categories = ProductCategory.objects.all() - self.assertCountEqual( - [c.name for c in categories], - categories_on_csv - ) - - def test_update_products(self): - self._import_csv() - first_products = self._get_products() - self._import_csv('example_products2.csv') - seconds_products = self._get_products() - self.assertEqual(len(first_products), len(seconds_products)) - - def test_preserve_id_on_import(self): - self._import_csv() - id_aceite = Product.objects.get(name='Aceite').id - self._import_csv('example_products2.csv') - id_post_updated = Product.objects.get(name='Aceite').id - self.assertEqual(id_aceite, id_post_updated) - - def test_update_categories_on_import(self): - self._import_csv() - first_products = self._get_products() - first_categories = {p["name"]: p["categories"] for p in first_products} - self._import_csv('example_products2.csv') - updated_products = self._get_products() - updated_categories = { - p["name"]: p["categories"] for p in updated_products} - - self.assertIn('Cafes', first_categories['Arroz']) - self.assertNotIn('Granos', first_categories['Arroz']) - - self.assertIn('Granos', updated_categories['Arroz']) - self.assertNotIn('Cafes', updated_categories['Arroz']) - - def test_update_price(self): - self._import_csv() - first_products = self._get_products() - first_prices = {p["name"]: p["price_list"] for p in first_products} - expected_first_prices = { - "Aceite": '50000.00', - "Café": '14000.00', - "Arroz": '7000.00' - } - self.assertDictEqual( - expected_first_prices, - first_prices - ) - - self._import_csv('example_products2.csv') - updated_products = self._get_products() - updated_prices = {p["name"]: p["price_list"] for p in updated_products} - expected_updated_prices = { - "Aceite": '50000.00', - "Café": '15000.00', - "Arroz": '6000.00' - } - - self.assertDictEqual( - expected_updated_prices, - updated_prices - ) - - def _get_products(self): - products_response = self.client.get("/don_confiao/productos") - return json.loads(products_response.content.decode('utf-8')) - - def _import_csv(self, csv_file='example_products.csv'): - app_name = "don_confiao" - app_dir = os.path.join(settings.BASE_DIR, app_name) - example_csv = os.path.join(app_dir, csv_file) - with open(example_csv, 'rb') as csv: - self.client.post( - "/don_confiao/importar_productos", - {"csv_file": csv} - ) diff --git a/tienda_ilusion/don_confiao/tests/test_purchase_with_payment.py b/tienda_ilusion/don_confiao/tests/test_purchase_with_payment.py deleted file mode 100644 index 962aaa2..0000000 --- a/tienda_ilusion/don_confiao/tests/test_purchase_with_payment.py +++ /dev/null @@ -1,51 +0,0 @@ -from django.test import Client, TestCase - -from ..models import Payment, Sale, Product, Customer - - -class TestPurchaseWithPayment(TestCase): - def setUp(self): - self.client = Client() - self.product = Product() - self.product.name = "Arroz" - self.product.price = 5000 - self.product.save() - customer = Customer() - customer.name = "Noelba Lopez" - customer.save() - self.customer = customer - - def test_generate_payment_when_it_has_payment(self): - quantity = 2 - unit_price = 2500 - total = 5000 - self.client.post( - '/don_confiao/comprar', - { - "customer": str(self.customer.id), - "date": "2024-07-27", - "phone": "3010101000", - "description": "Venta de contado", - "saleline_set-TOTAL_FORMS": "1", - "saleline_set-INITIAL_FORMS": "0", - "saleline_set-MIN_NUM_FORMS": "0", - "saleline_set-MAX_NUM_FORMS": "1000", - "saleline_set-0-product": str(self.product.id), - "saleline_set-0-quantity": str(quantity), - "saleline_set-0-unit_price": str(unit_price), - "saleline_set-0-description": "Linea de Venta", - "saleline_set-0-sale": "", - "saleline_set-0-id": "", - "quantity_lines": "1", - "quantity_products": str(quantity), - "ammount": str(quantity * unit_price), - "payment_method": "CASH", - } - ) - - purchases = Sale.objects.all() - self.assertEqual(1, len(purchases)) - payments = Payment.objects.all() - self.assertEqual(1, len(payments)) - self.assertEqual(total, payments[0].amount) - self.assertEqual('CASH', payments[0].type_payment) diff --git a/tienda_ilusion/don_confiao/tests/test_summary_view_purchase.py b/tienda_ilusion/don_confiao/tests/test_summary_view_purchase.py deleted file mode 100644 index 8def1b4..0000000 --- a/tienda_ilusion/don_confiao/tests/test_summary_view_purchase.py +++ /dev/null @@ -1,53 +0,0 @@ -from django.test import TestCase, Client -from ..models import Sale, Product, SaleLine, Customer - - -class TestSummaryViewPurchase(TestCase): - def setUp(self): - customer = Customer() - customer.name = 'Alejo Mono' - customer.save() - - self.client = Client() - purchase = Sale() - purchase.customer = customer - purchase.date = "2024-07-30" - purchase.clean() - purchase.save() - - product = Product() - product.name = "cafe" - product.price = "72500" - product.save() - - line = SaleLine() - line.sale = purchase - line.product = product - line.quantity = "11" - line.unit_price = "72500" - line.save() - self.purchase = purchase - - def test_summary_has_customer(self): - url = "/don_confiao/resumen_compra/" + str(self.purchase.id) - response = self.client.get(url) - self.assertEqual(response.status_code, 200) - self.assertEqual( - response.context["purchase"].customer, - self.purchase.customer - ) - self.assertIn('Alejo Mono', response.content.decode('utf-8')) - - def test_json_summary(self): - url = f"/don_confiao/resumen_compra_json/{self.purchase.id}" - response = self.client.get(url) - content = response.content.decode('utf-8') - self.assertEqual(response.status_code, 200) - self.assertIn('Alejo Mono', content) - self.assertIn('cafe', content) - self.assertIn('72500', content) - self.assertIn('quantity', content) - self.assertIn('11', content) - self.assertIn('date', content) - self.assertIn(self.purchase.date, content) - self.assertIn('lines', content) diff --git a/tienda_ilusion/don_confiao/tests/tests.py b/tienda_ilusion/don_confiao/tests/tests.py deleted file mode 100644 index 976518b..0000000 --- a/tienda_ilusion/don_confiao/tests/tests.py +++ /dev/null @@ -1,96 +0,0 @@ -from django.test import TestCase -from django.core.exceptions import ValidationError - -from ..models import Customer, Product, Sale, SaleLine - - -class ConfiaoTest(TestCase): - def setUp(self): - self.product = Product() - self.product.name = "Pepino" - self.product.price = 5000 - self.product.save() - - self.customer = Customer() - self.customer.name = "Don Confiao Gonzalez" - self.customer.address = "Patio Bonito" - self.customer.save() - - def test_create_sale(self): - sale = Sale() - sale.customer = self.customer - sale.date = "2024-06-22 12:05:00" - sale.phone = '666666666' - sale.description = "Description" - sale.save() - - self.assertIsInstance(sale, Sale) - - def test_can_create_sale_without_payment_method(self): - sale = Sale() - sale.customer = self.customer - sale.date = "2024-06-22 12:05:00" - sale.phone = '666666666' - sale.description = "Description" - sale.payment_method = '' - - with self.assertRaises(ValidationError): - sale.full_clean() - - def test_create_sale_line(self): - sale = Sale() - sale.customer = self.customer - sale.date = "2024-06-22" - sale.phone = '666666666' - sale.description = "Description" - - line = SaleLine() - line.sale = sale - line.product = self.product - line.quantity = 2 - line.unit_price = 2500 - line.amount = 5000 - sale.save() - line.save() - self.assertEqual(SaleLine.objects.all()[0].quantity, 2) - - def test_create_sale_with_lines(self): - sale = Sale() - sale.customer = self.customer - sale.date = "2024-06-22" - sale.phone = '666666666' - sale.description = "Description" - - line1 = SaleLine() - line1.sale = sale - line1.product = self.product - line1.quantity = 2 - line1.unit_price = 2500 - line1.amount = 5000 - - line2 = SaleLine() - line2.sale = sale - line2.product = self.product - line2.quantity = 2 - line2.unit_price = 2500 - line2.amount = 5000 - - sale.save() - line1.save() - line2.save() - - self.assertEqual(len(SaleLine.objects.all()), 2) - self.assertEqual( - Sale.objects.all()[0].saleline_set.all()[0].quantity, - 2 - ) - - def test_allow_sale_without_description(self): - sale = Sale() - sale.customer = self.customer - sale.date = "2024-06-22" - sale.phone = '666666666' - sale.description = None - sale.save() - - self.assertEqual(len(Sale.objects.all()), 1) diff --git a/tienda_ilusion/don_confiao/tests/tests_purchase_form.py b/tienda_ilusion/don_confiao/tests/tests_purchase_form.py deleted file mode 100644 index 7cfd236..0000000 --- a/tienda_ilusion/don_confiao/tests/tests_purchase_form.py +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env python3 -from django.test import TestCase -from ..forms import PurchaseForm -from ..models import Customer - -_csrf_token = \ - "bVjBevJRavxRPFOlVgAWiyh9ceuiwPlyEcmbPZprNuCGHjFZRKZrBeunJvKTRgOx" - - -class PurchaseFormTest(TestCase): - def setUp(self): - self.customer = Customer() - self.customer.name = "Don Confiao Gonzalez" - self.customer.address = "Patio Bonito" - self.customer.save() - - def test_add_purchase(self): - form_data = { - "csrfmiddlewaretoken": _csrf_token, - "customer": self.customer.id, - "date": "2024-08-03", - "payment_method": "CASH", - "phone": "sfasfd", - "description": "dasdadad", - "saleline_set-TOTAL_FORMS": "1", - "saleline_set-INITIAL_FORMS": "0", - "saleline_set-MIN_NUM_FORMS": "0", - "saleline_set-MAX_NUM_FORMS": "1000", - "saleline_set-0-product": "5", - "saleline_set-0-quantity": "1", - "saleline_set-0-unit_price": "500", - "saleline_set-0-description": "afasdfasdf", - "saleline_set-0-sale": "", - "saleline_set-0-id": "", - "quantity_lines": "1", - "quantity_products": "1", - "ammount": "500", - "form": "" - } - - purchase_form = PurchaseForm(data=form_data) - purchase_form.is_valid() - - # raise Exception(purchase_form) - self.assertTrue(purchase_form.is_valid()) diff --git a/tienda_ilusion/don_confiao/urls.py b/tienda_ilusion/don_confiao/urls.py deleted file mode 100644 index 3b4dd69..0000000 --- a/tienda_ilusion/don_confiao/urls.py +++ /dev/null @@ -1,34 +0,0 @@ -from django.urls import path, include -from rest_framework.routers import DefaultRouter - -from . import views -from . import api_views - -app_name = 'don_confiao' - -router = DefaultRouter() -router.register(r'sales', api_views.SaleView, basename='sale') -router.register(r'customers', api_views.CustomerView, basename='customer') -router.register(r'products', api_views.ProductView, basename='product') -router.register(r'reconciliate_jar', api_views.ReconciliateJarModelView, - basename='reconciliate_jar') - -urlpatterns = [ - path("", views.index, name="wellcome"), - path("comprar", views.buy, name="buy"), - path("compras", views.purchases, name="purchases"), - path("productos", views.products, name="products"), - path("lista_productos", views.ProductListView.as_view(), name='product_list'), - path("importar_productos", views.import_products, name="import_products"), - path("importar_terceros", views.import_customers, name="import_customers"), - path("exportar_ventas_para_tryton", - views.exportar_ventas_para_tryton, - name="exportar_ventas_para_tryton"), - path("resumen_compra/", views.purchase_summary, name="purchase_summary"), - path("resumen_compra_json/", api_views.SaleSummary.as_view(), name="purchase_json_summary"), - path("payment_methods/all/select_format", api_views.PaymentMethodView.as_view(), name="payment_methods_to_select"), - path('purchases/for_reconciliation', api_views.SalesForReconciliationView.as_view(), name='sales_for_reconciliation'), - path('reconciliate_jar', api_views.ReconciliateJarView.as_view()), - path('api/admin_code/validate/', api_views.AdminCodeValidateView.as_view()), - path('api/', include(router.urls)), -] diff --git a/tienda_ilusion/don_confiao/views.py b/tienda_ilusion/don_confiao/views.py deleted file mode 100644 index ff14a23..0000000 --- a/tienda_ilusion/don_confiao/views.py +++ /dev/null @@ -1,239 +0,0 @@ -from django.shortcuts import render -from django.http import HttpResponse, HttpResponseRedirect, JsonResponse -from django.views.generic import ListView -from django.db import transaction - -from .models import ( - Sale, SaleLine, Product, Customer, ProductCategory, Payment, PaymentMethods, ReconciliationJar) -from .forms import ( - ImportProductsForm, - ImportCustomersForm, - PurchaseForm, - SaleLineFormSet, - PurchaseSummaryForm) - -import csv -import io -import json -from decimal import Decimal - - -class DecimalEncoder(json.JSONEncoder): - def default(self, obj): - if isinstance(obj, Decimal): - return float(obj) - return json.JSONEncoder.default(self, obj) - - -def index(request): - return render(request, 'don_confiao/index.html') - - -def buy(request): - if request.method == "POST": - sale_form = PurchaseForm(request.POST) - line_formset = SaleLineFormSet(request.POST) - sale_summary_form = PurchaseSummaryForm(request.POST) - forms_are_valid = all([ - sale_form.is_valid(), - line_formset.is_valid(), - sale_summary_form.is_valid() - ]) - payment_method = request.POST.get('payment_method') - valid_payment_methods = [PaymentMethods.CASH] - valid_payment_method = payment_method in valid_payment_methods - if forms_are_valid: - with transaction.atomic(): - sale = sale_form.save() - line_formset.instance = sale - line_formset.save() - Payment.total_payment_from_sale( - payment_method, - sale - ) - return HttpResponseRedirect("compras") - else: - sale_form = PurchaseForm() - line_formset = SaleLineFormSet() - sale_summary_form = PurchaseSummaryForm() - return render( - request, - 'don_confiao/purchase.html', - { - 'sale_form': sale_form, - 'linea_formset': line_formset, - 'summary_form': sale_summary_form, - 'list_products': json.dumps(Product.to_list(), cls=DecimalEncoder), - } - ) - - -def purchases(request): - purchases = Sale.objects.all() - context = { - "purchases": purchases, - } - return render(request, 'don_confiao/purchases.html', context) - - -def products(request): - return JsonResponse(Product.to_list(), safe=False) - - -def import_products(request): - if request.method == "POST": - form = ImportProductsForm(request.POST, request.FILES) - if form.is_valid(): - handle_import_products_file(request.FILES["csv_file"]) - return HttpResponseRedirect("productos") - else: - form = ImportProductsForm() - return render( - request, - "don_confiao/import_products.html", - {'form': form} - ) - - -def import_customers(request): - if request.method == "POST": - form = ImportCustomersForm(request.POST, request.FILES) - if form.is_valid(): - handle_import_customers_file(request.FILES["csv_file"]) - return HttpResponseRedirect("productos") - else: - form = ImportCustomersForm() - return render( - request, - "don_confiao/import_customers.html", - {'form': form} - ) - - -def reconciliations(request): - return HttpResponse('

Reconciliaciones

') - - -def purchase_summary(request, id): - purchase = Sale.objects.get(pk=id) - return render( - request, - "don_confiao/purchase_summary.html", - { - "purchase": purchase - } - ) - - -def _categories_from_csv_string(categories_string, separator="&"): - categories = categories_string.split(separator) - clean_categories = [c.strip() for c in categories] - return [_category_from_name(category) for category in clean_categories] - - -def _category_from_name(name): - return ProductCategory.objects.get_or_create(name=name)[0] - - -def handle_import_products_file(csv_file): - data = io.StringIO(csv_file.read().decode('utf-8')) - reader = csv.DictReader(data, quotechar='"') - for row in reader: - product, created = Product.objects.update_or_create( - name=row['producto'], - defaults={ - 'price': row['precio'], - 'measuring_unit': row['unidad'] - } - ) - categories = _categories_from_csv_string(row["categorias"]) - product.categories.clear() - for category in categories: - product.categories.add(category) - -def handle_import_customers_file(csv_file): - data = io.StringIO(csv_file.read().decode('utf-8')) - reader = csv.DictReader(data, quotechar='"') - for row in reader: - customer, created = Customer.objects.update_or_create( - name=row['nombre'], - defaults={ - 'email': row['correo'], - 'phone': row['telefono'] - } - ) - - -def exportar_ventas_para_tryton(request): - tryton_sales_header = [ - "Tercero", - "Dirección de facturación", - "Dirección de envío", - "Descripción", - "Referencia", - "Fecha venta", - "Plazo de pago", - "Almacén", - "Moneda", - "Líneas/Producto", - "Líneas/Cantidad", - "Líneas/Precio unitario", - "Líneas/Unidad", - "Empresa", - "Tienda", - "Terminal de venta", - "Autorecogida", - "Comentario" - ] - - if request.method == "GET": - response = HttpResponse(content_type='text/csv') - response['Content-Disposition'] = "attachment; filename=sales.csv" - writer = csv.writer(response) - writer.writerow(tryton_sales_header) - - sales = Sale.objects.all() - - for sale in sales: - sale_lines = SaleLine.objects.filter(sale=sale.id) - if not sale_lines: - continue - lines = [] - first_sale_line = sale_lines[0] - customer_info = [sale.customer.name] * 3 + [sale.description] * 2 - first_line = customer_info + [ - sale.date, - "Contado", - "Almacén", - "Peso colombiano", - first_sale_line.product.name, - first_sale_line.quantity, - "Unidad", - first_sale_line.unit_price, - "TIENDA LA ILUSIÓN", - "Tienda La Ilusion", - "La Ilusion", - True, - sale.description] - lines.append(first_line) - for line in sale_lines[1:]: - lines.append([""]*9+[ - line.product.name, - line.quantity, - line.unit_price, - "Unidad"]+[""]*5) - for row in lines: - writer.writerow(row) - - return response - - -class ProductListView(ListView): - model = Product - template_model = 'don_confiao/product_list.html' - - def get_queryset(self): - name = self.request.GET.get('name') - if name: - return Product.objects.filter(name__icontains=name) - return Product.objects.all() diff --git a/tienda_ilusion/manage.py b/tienda_ilusion/manage.py deleted file mode 100755 index 4b84f87..0000000 --- a/tienda_ilusion/manage.py +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env python -"""Django's command-line utility for administrative tasks.""" -import os -import sys - - -def main(): - """Run administrative tasks.""" - os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'tienda_ilusion.settings') - try: - from django.core.management import execute_from_command_line - except ImportError as exc: - raise ImportError( - "Couldn't import Django. Are you sure it's installed and " - "available on your PYTHONPATH environment variable? Did you " - "forget to activate a virtual environment?" - ) from exc - execute_from_command_line(sys.argv) - - -if __name__ == '__main__': - main() diff --git a/tienda_ilusion/tienda_ilusion/__init__.py b/tienda_ilusion/tienda_ilusion/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/tienda_ilusion/tienda_ilusion/asgi.py b/tienda_ilusion/tienda_ilusion/asgi.py deleted file mode 100644 index 8832126..0000000 --- a/tienda_ilusion/tienda_ilusion/asgi.py +++ /dev/null @@ -1,16 +0,0 @@ -""" -ASGI config for tienda_ilusion project. - -It exposes the ASGI callable as a module-level variable named ``application``. - -For more information on this file, see -https://docs.djangoproject.com/en/5.0/howto/deployment/asgi/ -""" - -import os - -from django.core.asgi import get_asgi_application - -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'tienda_ilusion.settings') - -application = get_asgi_application() diff --git a/tienda_ilusion/tienda_ilusion/settings.py b/tienda_ilusion/tienda_ilusion/settings.py deleted file mode 100644 index f42a1b0..0000000 --- a/tienda_ilusion/tienda_ilusion/settings.py +++ /dev/null @@ -1,128 +0,0 @@ -""" -Django settings for tienda_ilusion project. - -Generated by 'django-admin startproject' using Django 5.0.6. - -For more information on this file, see -https://docs.djangoproject.com/en/5.0/topics/settings/ - -For the full list of settings and their values, see -https://docs.djangoproject.com/en/5.0/ref/settings/ -""" - -from pathlib import Path - -# Build paths inside the project like this: BASE_DIR / 'subdir'. -BASE_DIR = Path(__file__).resolve().parent.parent - - -# Quick-start development settings - unsuitable for production -# See https://docs.djangoproject.com/en/5.0/howto/deployment/checklist/ - -# SECURITY WARNING: keep the secret key used in production secret! -SECRET_KEY = 'django-insecure-zh6rinl@8y7g(cf781snisx2j%p^c#d&b2@@9cqe!v@4yv8x=v' - -# SECURITY WARNING: don't run with debug turned on in production! -DEBUG = True - -ALLOWED_HOSTS = [] - - -# Application definition - -INSTALLED_APPS = [ - 'don_confiao.apps.DonConfiaoConfig', - 'django.contrib.admin', - 'django.contrib.auth', - 'django.contrib.contenttypes', - 'django.contrib.sessions', - 'django.contrib.messages', - 'django.contrib.staticfiles', - 'rest_framework', - # 'don_confiao' -] - -MIDDLEWARE = [ - 'django.middleware.security.SecurityMiddleware', - 'django.contrib.sessions.middleware.SessionMiddleware', - 'django.middleware.common.CommonMiddleware', - 'django.middleware.csrf.CsrfViewMiddleware', - 'django.contrib.auth.middleware.AuthenticationMiddleware', - 'django.contrib.messages.middleware.MessageMiddleware', - 'django.middleware.clickjacking.XFrameOptionsMiddleware', -] - -ROOT_URLCONF = 'tienda_ilusion.urls' - -TEMPLATES = [ - { - 'BACKEND': 'django.template.backends.django.DjangoTemplates', - 'DIRS': [], - 'APP_DIRS': True, - 'OPTIONS': { - 'context_processors': [ - 'django.template.context_processors.debug', - 'django.template.context_processors.request', - 'django.contrib.auth.context_processors.auth', - 'django.contrib.messages.context_processors.messages', - ], - }, - }, -] - -WSGI_APPLICATION = 'tienda_ilusion.wsgi.application' - - -# Database -# https://docs.djangoproject.com/en/5.0/ref/settings/#databases - -DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': BASE_DIR / 'db.sqlite3', - } -} - - -# Password validation -# https://docs.djangoproject.com/en/5.0/ref/settings/#auth-password-validators - -AUTH_PASSWORD_VALIDATORS = [ - { - 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', - }, - { - 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', - }, - { - 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', - }, - { - 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', - }, -] - - -# Internationalization -# https://docs.djangoproject.com/en/5.0/topics/i18n/ - -LANGUAGE_CODE = 'en-us' - -TIME_ZONE = 'UTC' - -USE_I18N = True - -USE_TZ = True - - -# Static files (CSS, JavaScript, Images) -# https://docs.djangoproject.com/en/5.0/howto/static-files/ - -STATIC_URL = 'static/' - -# Default primary key field type -# https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field - -DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' - -FIXTURE_DIRS = ['don_confiao/tests/Fixtures'] diff --git a/tienda_ilusion/tienda_ilusion/urls.py b/tienda_ilusion/tienda_ilusion/urls.py deleted file mode 100644 index 79562c1..0000000 --- a/tienda_ilusion/tienda_ilusion/urls.py +++ /dev/null @@ -1,26 +0,0 @@ -""" -URL configuration for tienda_ilusion project. - -The `urlpatterns` list routes URLs to views. For more information please see: - https://docs.djangoproject.com/en/5.0/topics/http/urls/ -Examples: -Function views - 1. Add an import: from my_app import views - 2. Add a URL to urlpatterns: path('', views.home, name='home') -Class-based views - 1. Add an import: from other_app.views import Home - 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') -Including another URLconf - 1. Import the include() function: from django.urls import include, path - 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) -""" -from django.contrib import admin -from django.urls import include, path - - -app_name = "don_confiao" - -urlpatterns = [ - path("don_confiao/", include("don_confiao.urls")), - path('admin/', admin.site.urls), -] diff --git a/tienda_ilusion/tienda_ilusion/wsgi.py b/tienda_ilusion/tienda_ilusion/wsgi.py deleted file mode 100644 index 90542ab..0000000 --- a/tienda_ilusion/tienda_ilusion/wsgi.py +++ /dev/null @@ -1,16 +0,0 @@ -""" -WSGI config for tienda_ilusion project. - -It exposes the WSGI callable as a module-level variable named ``application``. - -For more information on this file, see -https://docs.djangoproject.com/en/5.0/howto/deployment/wsgi/ -""" - -import os - -from django.core.wsgi import get_wsgi_application - -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'tienda_ilusion.settings') - -application = get_wsgi_application() diff --git a/tienda_ilusion/don_confiao/frontend/don-confiao/vite.config.mjs b/vite.config.mjs similarity index 96% rename from tienda_ilusion/don_confiao/frontend/don-confiao/vite.config.mjs rename to vite.config.mjs index b26c415..02ea27a 100644 --- a/tienda_ilusion/don_confiao/frontend/don-confiao/vite.config.mjs +++ b/vite.config.mjs @@ -65,7 +65,6 @@ export default defineConfig({ port: 3000, }, build: { - outDir: '../../static/frontend/', + outDir: 'dist/', }, - base: '/frontend/', }) diff --git a/vuetify.Dockerfile b/vuetify.Dockerfile index 8e8769a..38fd55b 100644 --- a/vuetify.Dockerfile +++ b/vuetify.Dockerfile @@ -2,7 +2,7 @@ from node WORKDIR /app/ -COPY tienda_ilusion/don_confiao/frontend/don-confiao/package.json /app/ +COPY ./package.json /app/ RUN npm install