Giter VIP home page Giter VIP logo

djangocrm / django-crm Goto Github PK

View Code? Open in Web Editor NEW
24.0 4.0 8.0 5.57 MB

A Customer Relationship Management system (CRM) based on the Django Admin. This CRM app is designed for individual use by any company. No shared access for multiple companies. Your business data remains under your exclusive control. ⭐️ Star to support our work!

License: GNU Affero General Public License v3.0

Python 90.80% HTML 9.03% CSS 0.02% JavaScript 0.15%
crm-system customer-retention django-crm email-campaigns leads contacts crm email-marketing newsletter sales

django-crm's Introduction

Django-CRM

(Customer Relationship Management app)

The use of CRM by companies allows them to improve the sales performance of their products and services. The more complex and time-consuming the sales process, the greater the improvement.
This CRM is designed for individual use by any company. Access to the company's business data remains solely under its control.

Key Features of client relationship software (features of crm)

☑️ Team tasks & projects ☑️ Lead management ☑️ Email-marketing
☑️ Contact management ☑️ Deal management (instant overview all active deals) ☑️ Sales forecasting
☑️ Email sync & tracking ☑️ Marketing activities (Lead sources) ☑️ Sales pipeline
☑️ Apps & integrations ☑️ Sales Performance Management ☑️ Analytical reporting

Django CRM is an open-source Django-based project. It is written in Python (python crm). Frontend and backend are almost entirely based on the Django Admin site. CRM uses adaptive Admin HTML templates out-of-the-box. Django is an excellently documented framework with lots of examples. The documentation on the Admin site takes up only one web page.
The original idea is that since Django Admin is already a professional object management interface with a flexible permissions system for users (view, change, add, and delete objects), all you need to do is create models for the objects (such as Leads, Requests, Deals, Companies, etc.) and add business logic.

All this ensures:

  • significantly easier project customization and development;
  • simpler project deployment and production server support.

The software package provides two websites: a CRM site for all users and a site for administrators. The project code is stable (has been in practical use for many years).

Main applications

The CRM software consists of the following main applications:

  • TASKS app:
    • Task (with related: files, chat, reminders, tags)
      • subtasks
    • Memo (office memo)
      • tasks / project
    • Project (tasks collection):
      • tasks
    • Tags
    • … (+ 3 more models).
  • CRM app:
    • Requests (commercial inquiries)
    • Leads (potential customers)
    • Companies
    • Contact persons (associated with their companies)
    • Deals (like "Opportunities")
    • Emails
    • Products (goods and services)
    • Payments (received, guaranteed, high and low probability)
    • … (+ 12 more models). Analytical crm report
  • ANALYTICS app:
    • Income Summary report (see screenshot)
    • Sales funnel report
    • Lead source Summary report
    • … (+ 5 more reports).
  • MASS MAIL app:
    • Email Accounts
    • Email Messages (newsletters)
    • Email Signatures (user signatures)
    • Mailing Outs

Supporting applications

The crm package also contains supporting applications such as:

  • Chat app (chat is available in every instance of a task, project, office memo and deal)
  • VoIP app (contact clients from deals)
  • Help app (dynamic help pages depending on user role)
  • Common app:
    • User profiles
    • Reminders (for tasks, projects, office memos and deals)

In total, at the moment, there are 79 tables in the database.

Additional functionality

  • Web form integration.
    • CRM form has built-in reCAPTCHA v3 protection;
    • Automatic detection of the country and city of the user who filled out the form;
  • User’s email account integration;
  • VoIP callback to smartphone;
  • Sending messages via messengers (like: Viber, WhatsApp, Skype).
  • Work with Excel files to import / export company contact details.

Email client

There is a built-in Email client using SMTP and IMAP protocols. Among other things, this allows the Django CRM to automatically save a copy of all correspondence for each request and deal in its database. Even if the correspondence was carried out in the user’s mail account (out of the CRM). The ticket mechanism is used for this.

CRM is able to work with email accounts protected by two-factor authentication, like gmail.

User Assistance

  • On the CRM pages, there is a link to a help page. Help pages are dynamic. Their content depends on the user's role.
  • Tooltips appear when you hover the mouse over many page elements, such as icons, buttons, links, table headings, etc.
  • There is also a user guide file.

Project localization

Django CRM has full support for translation of interface, formatting of dates, times and time zones.

Getting started

This project is deployed as a regular django project.

Please refer to:

Compatibility

  • Django 5.0.x
  • Python 3.10+
  • MySQL 8.0.11+ and PostgreSQL 12+

⭐️ Don't forget to star and fork the project if you like it.

Contributing

All types of contributions are welcome. Please see the Contributing guide.

Credits

  • Uses Google material icons.
  • Includes NicEdit - WYSIWYG Content Editor.

django-crm's People

Contributors

dependabot[bot] avatar djangocrm avatar vadym-kharchenko avatar virendracarpenter avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

django-crm's Issues

Unable to create a Deal. Getting (Exception Value: Model instances passed to related filters must be saved.)

`Environment:

Request Method: GET
Request URL: http://127.0.0.1:8888/en/crm/crm/deal/add/

Django Version: 5.0.6
Python Version: 3.12.3
Installed Applications:
['django.contrib.sites',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'crm.apps.CrmConfig',
'massmail.apps.MassmailConfig',
'analytics.apps.AnalyticsConfig',
'help',
'tasks.apps.TasksConfig',
'chat.apps.ChatConfig',
'voip',
'common.apps.CommonConfig',
'settings']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'common.utils.usermiddleware.UserMiddleware']

Traceback (most recent call last):
File "/mnt/Extras/RAW_DIAMOND/django-crm/venv/lib/python3.12/site-packages/django/core/handlers/exception.py", line 55, in inner
response = get_response(request)
^^^^^^^^^^^^^^^^^^^^^
File "/mnt/Extras/RAW_DIAMOND/django-crm/venv/lib/python3.12/site-packages/django/core/handlers/base.py", line 197, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/mnt/Extras/RAW_DIAMOND/django-crm/venv/lib/python3.12/site-packages/django/contrib/admin/options.py", line 716, in wrapper
return self.admin_site.admin_view(view)(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/mnt/Extras/RAW_DIAMOND/django-crm/venv/lib/python3.12/site-packages/django/utils/decorators.py", line 188, in _view_wrapper
result = _process_exception(request, e)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/mnt/Extras/RAW_DIAMOND/django-crm/venv/lib/python3.12/site-packages/django/utils/decorators.py", line 186, in _view_wrapper
response = view_func(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/mnt/Extras/RAW_DIAMOND/django-crm/venv/lib/python3.12/site-packages/django/views/decorators/cache.py", line 80, in _view_wrapper
response = view_func(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/mnt/Extras/RAW_DIAMOND/django-crm/venv/lib/python3.12/site-packages/django/contrib/admin/sites.py", line 240, in inner
return view(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/mnt/Extras/RAW_DIAMOND/django-crm/venv/lib/python3.12/site-packages/django/contrib/admin/options.py", line 1945, in add_view
return self.changeform_view(request, None, form_url, extra_context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/mnt/Extras/RAW_DIAMOND/django-crm/venv/lib/python3.12/site-packages/django/utils/decorators.py", line 48, in _wrapper
return bound_method(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/mnt/Extras/RAW_DIAMOND/django-crm/venv/lib/python3.12/site-packages/django/utils/decorators.py", line 188, in _view_wrapper
result = _process_exception(request, e)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/mnt/Extras/RAW_DIAMOND/django-crm/venv/lib/python3.12/site-packages/django/utils/decorators.py", line 186, in _view_wrapper
response = view_func(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/mnt/Extras/RAW_DIAMOND/django-crm/venv/lib/python3.12/site-packages/django/contrib/admin/options.py", line 1804, in changeform_view
return self._changeform_view(request, object_id, form_url, extra_context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/mnt/Extras/RAW_DIAMOND/django-crm/venv/lib/python3.12/site-packages/django/contrib/admin/options.py", line 1872, in _changeform_view
formsets, inline_instances = self._create_formsets(

File "/mnt/Extras/RAW_DIAMOND/django-crm/crm/site/dealadmin.py", line 136, in _create_formsets
p = Payment.objects.filter(deal=obj).last()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/mnt/Extras/RAW_DIAMOND/django-crm/venv/lib/python3.12/site-packages/django/db/models/manager.py", line 87, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/mnt/Extras/RAW_DIAMOND/django-crm/venv/lib/python3.12/site-packages/django/db/models/query.py", line 1476, in filter
return self._filter_or_exclude(False, args, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/mnt/Extras/RAW_DIAMOND/django-crm/venv/lib/python3.12/site-packages/django/db/models/query.py", line 1494, in _filter_or_exclude
clone._filter_or_exclude_inplace(negate, args, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/mnt/Extras/RAW_DIAMOND/django-crm/venv/lib/python3.12/site-packages/django/db/models/query.py", line 1501, in _filter_or_exclude_inplace
self._query.add_q(Q(*args, **kwargs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/mnt/Extras/RAW_DIAMOND/django-crm/venv/lib/python3.12/site-packages/django/db/models/sql/query.py", line 1613, in add_q
clause, _ = self._add_q(q_object, self.used_aliases)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/mnt/Extras/RAW_DIAMOND/django-crm/venv/lib/python3.12/site-packages/django/db/models/sql/query.py", line 1645, in _add_q
child_clause, needed_inner = self.build_filter(

File "/mnt/Extras/RAW_DIAMOND/django-crm/venv/lib/python3.12/site-packages/django/db/models/sql/query.py", line 1559, in build_filter
condition = self.build_lookup(lookups, col, value)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/mnt/Extras/RAW_DIAMOND/django-crm/venv/lib/python3.12/site-packages/django/db/models/sql/query.py", line 1389, in build_lookup
lookup = lookup_class(lhs, rhs)
^^^^^^^^^^^^^^^^^^^^^^
File "/mnt/Extras/RAW_DIAMOND/django-crm/venv/lib/python3.12/site-packages/django/db/models/lookups.py", line 30, in init
self.rhs = self.get_prep_lookup()
^^^^^^^^^^^^^^^^^^^^^^
File "/mnt/Extras/RAW_DIAMOND/django-crm/venv/lib/python3.12/site-packages/django/db/models/fields/related_lookups.py", line 147, in get_prep_lookup
self.rhs = get_normalized_value(self.rhs, self.lhs)[0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/mnt/Extras/RAW_DIAMOND/django-crm/venv/lib/python3.12/site-packages/django/db/models/fields/related_lookups.py", line 45, in get_normalized_value
raise ValueError("Model instances passed to related filters must be saved.")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Exception Type: ValueError at /en/crm/crm/deal/add/
Exception Value: Model instances passed to related filters must be saved.
`

Create Dockerfiles for Project

Create Dockerfiles for the project to facilitate containerization and deployment.

Additional Notes:

  • Please specify any base images, required dependencies, or specific build instructions.
  • Consider using multi-stage builds for optimized image size.
  • Test the Dockerfiles thoroughly to ensure correct image creation and functionality.
    By creating Dockerfiles, we can streamline the development, testing, and deployment processes.

installation go wrong whitout LOAD_EXCHANGE_RATE

Hi and thanks for the code :-D

installation_and_configuration_guide.md, haveing crash in doing Manage.py collectstatic.

File "/home/luca/tmp/django-crm/crm/utils/rates_loader.py", line 17, in <module> 
BACKEND = import_string(settings.LOAD_RATE_BACKEND)
...
ModuleNotFoundError: No module named 'crm.backends.<specify_backend>'

Thiis, while LOAD_EXCHANGE_RATE = False. Is there a way to not use only the "RATE_BACKEND" and go on ?

Move the "REMAINDER_CHECK_INTERVAL" setting from the settings file to the settings application.

To make changing some project settings more convenient CRM has a Settings application that allows users to make changes through a web interface.

Here's what needs to be done:

  1. In settings app:
  • Create Reminders model with PositiveIntegerField (for the setting value).
  • In the admin.py file create RemindersAdmin in which the permissions to create and delete Reminders objects are set to False for all users.
  • Create a fixture with Reminders instance.
  1. In common app:
  • Add the loading of this fixture to the setupdata command.
  • In RemindersSender we change the receipt of the value "REMAINDER_CHECK_INTERVAL".
  • Create a test.

All changes must be committed separately (create a pull request), except for the last two points.
Every commit must pass existing tests.

Create draft pull requests to get assistance.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.