# Garpix Company
Company module for Django/DRF projects.
## Quickstart
Install with pip:
```bash
pip install garpix_company
```
Add the `garpix_company` to your `INSTALLED_APPS`:
```python
# settings.py
# ...
INSTALLED_APPS = [
# ...
'garpix_company',
]
```
and to migration modules:
```python
# settings.py
# ...
MIGRATION_MODULES = {
'garpix_company': 'app.migrations.garpix_company',
}
```
Add to `urls.py`:
```python
# ...
urlpatterns = [
# ...
# garpix_company
path('', include(('garpix_company.urls', 'garpix_company'), namespace='garpix_company')),
]
```
Add Company model to your project using abstract `AbstractCompany` from the model:
```python
from garpix_company.models import AbstractCompany
class Company(AbstractCompany):
pass
```
Add UserCompanyRole model to your project using abstract `AbstractUserCompanyRole` from the model:
```python
from garpix_company.models import AbstractUserCompanyRole
class UserCompanyRole(AbstractUserCompanyRole):
pass
```
Add `GARPIX_COMPANY_MODEL`, `GARPIX_USER_COMPANY_MODEL` and `GARPIX_COMPANY_ROLE_MODEL` to `settings.py`:
```python
# settings.py
GARPIX_COMPANY_MODEL = 'app.Company'
GARPIX_COMPANY_ROLE_MODEL = 'app.UserCompanyRole'
GARPIX_USER_COMPANY_MODEL = 'garpix_company.UserCompany'
```
Use `CompanyAdmin` as base in your admin panel:
```python
from django.contrib import admin
from app.models import Company
from garpix_company.admin import CompanyAdmin
@admin.register(Company)
class CompanyAdmin(CompanyAdmin):
pass
```
## Invite and create user
You can add fields to `company_invite/create_and_invite` endpoint.
To do it override `CreateAndInviteToCompanySerializer` by adding field and add it to `settings`:
```python
# settings.py
GARPIX_COMPANY_CREATE_AND_INVITE_SERIALIZER = 'app.serializers.CustomInviteCompanySerializer'
```
```python
# app.serializers.py
from rest_framework import serializers
from garpix_company.serializers import CreateAndInviteToCompanySerializer
class CustomInviteCompanySerializer(CreateAndInviteToCompanySerializer):
username = serializers.CharField(write_only=True)
class Meta(CreateAndInviteToCompanySerializer.Meta):
fields = CreateAndInviteToCompanySerializer.Meta.fields + ('username',)
```
You also can override `UserSerializer` and `CompanyRoleSerializer` to add custom fields to `user` and `role` fields of `/company/{pk}/user/` endpoints:
```python
# settings.py
GARPIX_COMPANY_USER_SERIALIZER = 'app.serializers.UserSerializer'
GARPIX_COMPANY_ROLE_SERIALIZER = 'app.serializers.CompanyRoleSerializer'
```
You can also set `GARPIX_COMPANY_INVITE_NOT_USERS` setting to True (False is default) to allow to invite not registered users
## Companies count limit
If you need to add some limitations on companies count the user can be a part of, you can override `check_user_companies_limit` class method of `Company` class:
```python
from garpix_company.models import AbstractCompany, get_user_company_model
class Company(AbstractCompany):
@classmethod
def check_user_companies_limit(cls, user):
UserCompany = get_user_company_model()
return UserCompany.objects.filter(user=user).count() < 1
```
See `garpix_company/tests/test_company.py` for examples.
# Changelog
Смотри [CHANGELOG.md](CHANGELOG.md).
# Contributing
Смотри [CONTRIBUTING.md](CONTRIBUTING.md).
# License
[MIT](LICENSE)
---
Developed by Garpix / [https://garpix.com](https://garpix.com)
Raw data
{
"_id": null,
"home_page": "https://github.com/garpixcms/garpix_company",
"name": "garpix-company",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "",
"author": "Garpix LTD",
"author_email": "info@garpix.com",
"download_url": "https://files.pythonhosted.org/packages/f1/18/bd533daef09e5f1fb3e123a0a8e6cf1a1dfba9cae05f9f565d49eac4f5e2/garpix_company-2.8.3.tar.gz",
"platform": null,
"description": "# Garpix Company\n\nCompany module for Django/DRF projects.\n\n\n## Quickstart\n\nInstall with pip:\n\n```bash\npip install garpix_company\n```\n\nAdd the `garpix_company` to your `INSTALLED_APPS`:\n\n```python\n# settings.py\n\n# ...\nINSTALLED_APPS = [\n # ...\n 'garpix_company',\n]\n```\n\nand to migration modules:\n\n```python\n# settings.py\n\n# ...\nMIGRATION_MODULES = {\n 'garpix_company': 'app.migrations.garpix_company',\n}\n```\n\nAdd to `urls.py`:\n\n```python\n\n# ...\nurlpatterns = [\n # ...\n # garpix_company\n path('', include(('garpix_company.urls', 'garpix_company'), namespace='garpix_company')),\n\n]\n```\n\nAdd Company model to your project using abstract `AbstractCompany` from the model:\n```python\nfrom garpix_company.models import AbstractCompany\n\n\nclass Company(AbstractCompany):\n pass\n\n```\n\nAdd UserCompanyRole model to your project using abstract `AbstractUserCompanyRole` from the model:\n```python\nfrom garpix_company.models import AbstractUserCompanyRole\n\n\nclass UserCompanyRole(AbstractUserCompanyRole):\n pass\n\n\n```\n\nAdd `GARPIX_COMPANY_MODEL`, `GARPIX_USER_COMPANY_MODEL` and `GARPIX_COMPANY_ROLE_MODEL` to `settings.py`:\n\n```python\n# settings.py\n\nGARPIX_COMPANY_MODEL = 'app.Company'\nGARPIX_COMPANY_ROLE_MODEL = 'app.UserCompanyRole'\nGARPIX_USER_COMPANY_MODEL = 'garpix_company.UserCompany'\n\n```\n\nUse `CompanyAdmin` as base in your admin panel:\n```python\nfrom django.contrib import admin\n\nfrom app.models import Company\nfrom garpix_company.admin import CompanyAdmin\n\n\n@admin.register(Company)\nclass CompanyAdmin(CompanyAdmin):\n pass\n\n```\n\n## Invite and create user\n\nYou can add fields to `company_invite/create_and_invite` endpoint. \n\nTo do it override `CreateAndInviteToCompanySerializer` by adding field and add it to `settings`:\n\n```python\n# settings.py\n\nGARPIX_COMPANY_CREATE_AND_INVITE_SERIALIZER = 'app.serializers.CustomInviteCompanySerializer'\n\n```\n\n```python\n# app.serializers.py\n\nfrom rest_framework import serializers\n\nfrom garpix_company.serializers import CreateAndInviteToCompanySerializer\n\n\nclass CustomInviteCompanySerializer(CreateAndInviteToCompanySerializer):\n username = serializers.CharField(write_only=True)\n\n class Meta(CreateAndInviteToCompanySerializer.Meta):\n fields = CreateAndInviteToCompanySerializer.Meta.fields + ('username',)\n\n\n```\n\nYou also can override `UserSerializer` and `CompanyRoleSerializer` to add custom fields to `user` and `role` fields of `/company/{pk}/user/` endpoints:\n\n```python\n# settings.py\n\nGARPIX_COMPANY_USER_SERIALIZER = 'app.serializers.UserSerializer'\nGARPIX_COMPANY_ROLE_SERIALIZER = 'app.serializers.CompanyRoleSerializer'\n\n```\n\nYou can also set `GARPIX_COMPANY_INVITE_NOT_USERS` setting to True (False is default) to allow to invite not registered users\n\n## Companies count limit\n\nIf you need to add some limitations on companies count the user can be a part of, you can override `check_user_companies_limit` class method of `Company` class:\n\n```python\nfrom garpix_company.models import AbstractCompany, get_user_company_model\n\n\nclass Company(AbstractCompany):\n\n @classmethod\n def check_user_companies_limit(cls, user):\n UserCompany = get_user_company_model()\n return UserCompany.objects.filter(user=user).count() < 1\n\n```\n\nSee `garpix_company/tests/test_company.py` for examples.\n\n# Changelog\n\n\u0421\u043c\u043e\u0442\u0440\u0438 [CHANGELOG.md](CHANGELOG.md).\n\n# Contributing\n\n\u0421\u043c\u043e\u0442\u0440\u0438 [CONTRIBUTING.md](CONTRIBUTING.md).\n\n# License\n\n[MIT](LICENSE)\n\n---\n\nDeveloped by Garpix / [https://garpix.com](https://garpix.com)\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "",
"version": "2.8.3",
"project_urls": {
"Homepage": "https://github.com/garpixcms/garpix_company"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "a9f31f22bc43a09b7b66c68e4ddbb12f26f3963e830102fd764b17505628c310",
"md5": "034b8158a663d8f76f94b3125d41d917",
"sha256": "ffcd67b7de4b0672d0d8fb17596d0e4f93b2fa76b4756aee496b6f57cf38792c"
},
"downloads": -1,
"filename": "garpix_company-2.8.3-py3-none-any.whl",
"has_sig": false,
"md5_digest": "034b8158a663d8f76f94b3125d41d917",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 29779,
"upload_time": "2023-05-22T15:07:06",
"upload_time_iso_8601": "2023-05-22T15:07:06.113594Z",
"url": "https://files.pythonhosted.org/packages/a9/f3/1f22bc43a09b7b66c68e4ddbb12f26f3963e830102fd764b17505628c310/garpix_company-2.8.3-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "f118bd533daef09e5f1fb3e123a0a8e6cf1a1dfba9cae05f9f565d49eac4f5e2",
"md5": "41d03d62b7bc76ec639d32cfd99df9ad",
"sha256": "914d281ce46c58a78170fb8c57878c0a7681320525bf87d9994ba230b9e78abf"
},
"downloads": -1,
"filename": "garpix_company-2.8.3.tar.gz",
"has_sig": false,
"md5_digest": "41d03d62b7bc76ec639d32cfd99df9ad",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 17164,
"upload_time": "2023-05-22T15:07:09",
"upload_time_iso_8601": "2023-05-22T15:07:09.203994Z",
"url": "https://files.pythonhosted.org/packages/f1/18/bd533daef09e5f1fb3e123a0a8e6cf1a1dfba9cae05f9f565d49eac4f5e2/garpix_company-2.8.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-05-22 15:07:09",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "garpixcms",
"github_project": "garpix_company",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "garpix-company"
}