Giter Club home page Giter Club logo

djangosige's Introduction

DjangoSIGE Build Status

Sistema Integrado de Gestão Empresarial baseado em Django

Projeto independente open-source desenvolvido em Python 3 no Windows, testado no GNU/Linux e Windows.

Dependências

  • Python - Versão 3.5+
  • django == 3.1.7
  • geraldo - Geração de PDF para pedidos de venda/compra
  • PySIGNFe (Opcional) - Necessário para a geração de NF-e, NFC-e, comunicação com SEFAZ, geração do DANFE, etc.
  • apache2 (Opcional)
  • mod_wsgi (Opcional)

Instalação:

  1. Instalar as bibliotecas/pacotes (no Linux):
sudo apt install -y libxml2 gcc python3-dev libxml2-dev libxslt1-dev zlib1g-dev python3-pip
sudo apt update
  1. Instalar dependências:
pip install -r requirements.txt
  1. Edite o conteúdo do arquivo djangosige/configs/configs.py

  2. Gere um .env local

python contrib/env_gen.py
  1. Sincronize a base de dados:
python manage.py migrate
  1. Crie um usuário (Administrador do sistema):
python manage.py createsuperuser
  1. Teste a instalação carregando o servidor de desenvolvimento (http://localhost:8000 no navegador):
python manage.py runserver

Implementações

  • Cadastro de produtos, clientes, empresas, fornecedores e transportadoras
  • Login/Logout
  • Criação de perfil para cada usuário.
  • Definição de permissões para usuários.
  • Criação e geração de PDF para orçamentos e pedidos de compra/venda
  • Módulo financeiro (Plano de Contas, Fluxo de Caixa e Lançamentos)
  • Módulo para controle de estoque
  • Módulo fiscal:
    • Geração e armazenamento de notas fiscais
    • Validação do XML de NF-e/NFC-es
    • Emissão, download, consulta e cancelamento de NF-e/NFC-es (Testar em ambiente de homologação)
    • Comunicação com SEFAZ (Consulta de cadastro, inutilização de notas, manifestação do destinatário)
  • Interface simples e em português

Créditos

Ajuda

Para relatar bugs ou fazer perguntas utilize o Issues ou via email [email protected]

Como este é um projeto em desenvolvimento, qualquer feedback será bem-vindo.

djangosige's People

Contributors

claysllanxavier avatar dependabot[bot] avatar flaviohenriqu avatar gguerran avatar lukasgarcya avatar rg3915 avatar thiagopena avatar victtorvpb avatar wfpena avatar

Stargazers

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

Watchers

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

djangosige's Issues

mysql problem

I am getting this error when migrating with mysql

Traceback (most recent call last):
File "manage.py", line 23, in
execute_from_command_line(sys.argv)
File "/usr/local/lib/python3.6/site-packages/django/core/management/init.py", line 381, in execute_from_command_line
utility.execute()
File "/usr/local/lib/python3.6/site-packages/django/core/management/init.py", line 375, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 316, in run_from_argv
self.execute(*args, **cmd_options)
File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 353, in execute
output = self.handle(*args, **options)
File "/usr/local/lib/python3.6/site-packages/django/core/management/base.py", line 83, in wrapped
res = handle_func(*args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/django/core/management/commands/migrate.py", line 203, in handle
fake_initial=fake_initial,
File "/usr/local/lib/python3.6/site-packages/django/db/migrations/executor.py", line 91, in migrate
self.recorder.ensure_schema()
File "/usr/local/lib/python3.6/site-packages/django/db/migrations/recorder.py", line 57, in ensure_schema
raise MigrationSchemaMissing("Unable to create the django_migrations table (%s)" % exc)
django.db.migrations.exceptions.MigrationSchemaMissing: Unable to create the django_migrations table ((1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(6) NOT NULL)' at line 1"))

Erro ao executar python3 manage.py runserver

Quando executo essa linha de comando aparece isso, tentei acessar o link http://127.0.0.1:8000/, mas não funciona

Performing system checks...

System check identified no issues (0 silenced).
novembro 29, 2018 - 18:04:52
Django version 2.0.5, using settings 'djangosige.configs'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Unhandled exception in thread started by <function check_errors..wrapper at 0x7f7438e9ac80>
Traceback (most recent call last):
File "/usr/local/lib/python3.6/dist-packages/django/core/servers/basehttp.py", line 44, in get_internal_wsgi_application
return import_string(app_path)
File "/usr/local/lib/python3.6/dist-packages/django/utils/module_loading.py", line 17, in import_string
module = import_module(module_path)
File "/usr/lib/python3.6/importlib/init.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "", line 994, in _gcd_import
File "", line 971, in _find_and_load
File "", line 955, in _find_and_load_unlocked
File "", line 665, in _load_unlocked
File "", line 678, in exec_module
File "", line 219, in _call_with_frames_removed
File "/var/www/html/djangoSIGE/ERP/djangosige/wsgi.py", line 22, in
application = get_wsgi_application()
File "/usr/local/lib/python3.6/dist-packages/django/core/wsgi.py", line 13, in get_wsgi_application
return WSGIHandler()
File "/usr/local/lib/python3.6/dist-packages/django/core/handlers/wsgi.py", line 140, in init
self.load_middleware()
File "/usr/local/lib/python3.6/dist-packages/django/core/handlers/base.py", line 37, in load_middleware
middleware = import_string(middleware_path)
File "/usr/local/lib/python3.6/dist-packages/django/utils/module_loading.py", line 17, in import_string
module = import_module(module_path)
File "/usr/lib/python3.6/importlib/init.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "", line 994, in _gcd_import
File "", line 971, in _find_and_load
File "", line 941, in _find_and_load_unlocked
File "", line 219, in _call_with_frames_removed
File "", line 994, in _gcd_import
File "", line 971, in _find_and_load
File "", line 953, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'whitenoise'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "/usr/local/lib/python3.6/dist-packages/django/utils/autoreload.py", line 225, in wrapper
fn(*args, **kwargs)
File "/usr/local/lib/python3.6/dist-packages/django/core/management/commands/runserver.py", line 140, in inner_run
handler = self.get_handler(*args, **options)
File "/usr/local/lib/python3.6/dist-packages/django/contrib/staticfiles/management/commands/runserver.py", line 27, in get_handler
handler = super().get_handler(*args, **options)
File "/usr/local/lib/python3.6/dist-packages/django/core/management/commands/runserver.py", line 65, in get_handler
return get_internal_wsgi_application()
File "/usr/local/lib/python3.6/dist-packages/django/core/servers/basehttp.py", line 49, in get_internal_wsgi_application
) from err
django.core.exceptions.ImproperlyConfigured: WSGI application 'djangosige.wsgi.application' could not be loaded; Error importing module.

Dúvida referente a como adicionar um novo campo no cadastro de fornecedores

Estou como uma dúvida referente à adição de um campo de cadastro de vendedores dentro do cadastro de fornecedores que estou fazendo em meu fork, fiz ele baseado no campo de cadastro de veículos em transportadoras. O código de cadastro está funcionando normalmente, mas o que usa a view editar está com um erro referente ao ManagementForm, o código atualmente está e em seguida o erro. Sei que é muita coisa, mas se puder me ajudar serei grato, estou há quase um mês com essa dúvida e não estou conseguindo resolver:

Model

# -*- coding: utf-8 -*-

from django.db import models

from .base import Pessoa


class Fornecedor(Pessoa):

    class Meta:
        verbose_name = "Fornecedor"


class Vendedor(models.Model):
    fornecedor_vendedor = models.ForeignKey(
        'cadastro.Fornecedor', related_name="vendedor", on_delete=models.CASCADE)
    nome = models.CharField(max_length=255, blank=True, null=True)
    telefone = models.CharField(max_length=255, blank=True, null=True)
    email = models.CharField(max_length=255, blank=True, null=True)

    def __unicode__(self):
        return u'%s / %s / %s' % (self.nome, self.telefone, self.email)

    def __str__(self):
        return u'%s / %s / %s' % (self.nome, self.telefone, self.email)

    def get_telefone_apenas_digitos(self):
        return self.telefone.replace('(', '').replace(' ', '').replace(')', '').replace('-', '')

View Fornecedor

# -*- coding: utf-8 -*-

from django.urls import reverse_lazy

from masterpy.apps.cadastro.forms import FornecedorForm
from masterpy.apps.cadastro.forms.fornecedor import VendedorFormSet
from masterpy.apps.cadastro.models import Fornecedor, Vendedor

from .base import AdicionarPessoaView, PessoasListView, EditarPessoaView


class AdicionarFornecedorView(AdicionarPessoaView):
    template_name = "cadastro/pessoa_add.html"
    success_url = reverse_lazy('cadastro:listafornecedoresview')
    success_message = "Fornecedor <b>%(nome_razao_social)s </b>adicionado com sucesso."
    permission_codename = 'add_fornecedor'

    def get_context_data(self, **kwargs):
        context = super(AdicionarFornecedorView,
                        self).get_context_data(**kwargs)
        context['title_complete'] = 'CADASTRAR FORNECEDOR'
        context['return_url'] = reverse_lazy('cadastro:listafornecedoresview')
        context['tipo_pessoa'] = 'fornecedor'
        return context

    def get(self, request, *args, **kwargs):
        form = FornecedorForm(prefix='fornecedor_form')
        vendedor_form = VendedorFormSet(prefix='vendedor_form')
        vendedor_form.can_delete = False
        return super(AdicionarFornecedorView, self).get(
            request, form, vendedor_form=vendedor_form, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        form = FornecedorForm(request.POST, request.FILES, prefix='fornecedor_form', request=request)
        vendedor_form = VendedorFormSet(request.POST, prefix='vendedor_form')
        return super(AdicionarFornecedorView, self).post(
            request, form, vendedor_form=vendedor_form, *args, **kwargs)


class FornecedoresListView(PessoasListView):
    template_name = 'cadastro/pessoa_list.html'
    model = Fornecedor
    context_object_name = 'all_fornecedores'
    success_url = reverse_lazy('cadastro:listafornecedoresview')
    permission_codename = 'view_fornecedor'

    def get_context_data(self, **kwargs):
        context = super(FornecedoresListView, self).get_context_data(**kwargs)
        context['title_complete'] = 'FORNECEDORES CADASTRADOS'
        context['add_url'] = reverse_lazy('cadastro:addfornecedorview')
        context['tipo_pessoa'] = 'fornecedor'
        return context


class EditarFornecedorView(EditarPessoaView):
    form_class = FornecedorForm
    model = Fornecedor
    template_name = "cadastro/pessoa_edit.html"
    success_url = reverse_lazy('cadastro:listafornecedoresview')
    success_message = "Fornecedor <b>%(nome_razao_social)s </b>editado com sucesso."
    permission_codename = 'change_fornecedor'

    def get_context_data(self, **kwargs):
        context = super(EditarFornecedorView, self).get_context_data(**kwargs)
        context['return_url'] = reverse_lazy('cadastro:listafornecedoresview')
        context['tipo_pessoa'] = 'fornecedor'
        return context

    def get(self, request, *args, **kwargs):
        self.object = self.get_object()
        form_class = self.get_form_class()
        form_class.prefix = "fornecedor_form"
        form = self.get_form(form_class)

        vendedor_form = VendedorFormSet(
            instance=self.object, prefix='veiculo_form')
        if Vendedor.objects.filter(
                fornecedor_vendedor=self.object.pk).count():
            vendedor_form.extra = 0

        return super(
            EditarFornecedorView, self).get(
            request, form, vendedor_form=vendedor_form, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        self.object = self.get_object()
        form_class = self.get_form_class()
        form = form_class(request.POST, request.FILES,
                          prefix='fornecedor_form',
                          instance=self.object, request=request)

        vendedor_form = VendedorFormSet(
            request.POST, prefix='vendedor_form', instance=self.object)

        return super(EditarFornecedorView, self).post(
            request, form, vendedor_form=vendedor_form, *args, **kwargs)

View Base

# -*- coding: utf-8 -*-

from masterpy.apps.base.custom_views import CustomCreateView, CustomListView, CustomUpdateView

from masterpy.apps.cadastro.forms import PessoaJuridicaForm, PessoaFisicaForm, EnderecoFormSet, TelefoneFormSet, EmailFormSet, \
    SiteFormSet, BancoFormSet, DocumentoFormSet
from masterpy.apps.cadastro.models import PessoaFisica, PessoaJuridica, Endereco, Telefone, Email, Site, Banco, Documento


class AdicionarPessoaView(CustomCreateView):

    def get_success_message(self, cleaned_data):
        return self.success_message % dict(cleaned_data, nome_razao_social=self.object.nome_razao_social)

    def get(self, request, form, *args, **kwargs):
        self.object = None

        veiculo_form = kwargs.pop('veiculo_form', None)

        vendedor_form = kwargs.pop('vendedor_form', None)

        pessoa_juridica_form = PessoaJuridicaForm(prefix='pessoa_jur_form')
        pessoa_fisica_form = PessoaFisicaForm(prefix='pessoa_fis_form')

        endereco_form = EnderecoFormSet(prefix='endereco_form')
        endereco_form.can_delete = False

        banco_form = BancoFormSet(prefix='banco_form')
        banco_form.can_delete = False

        documento_form = DocumentoFormSet(prefix='documento_form')
        documento_form.can_delete = False

        telefone_form = TelefoneFormSet(prefix='telefone_form')
        email_form = EmailFormSet(prefix='email_form')
        site_form = SiteFormSet(prefix='site_form')

        formsets = [telefone_form, email_form, site_form]
        for formset in formsets:
            formset.can_delete = False

        return self.render_to_response(self.get_context_data(form=form,
                                                             pessoa_juridica_form=pessoa_juridica_form,
                                                             pessoa_fisica_form=pessoa_fisica_form,
                                                             endereco_form=endereco_form,
                                                             banco_form=banco_form,
                                                             documento_form=documento_form,
                                                             formsets=formsets,
                                                             vendedor_form=vendedor_form,
                                                             veiculo_form=veiculo_form))

    def post(self, request, form, *args, **kwargs):
        self.object = None
        extra_forms = []

        veiculo_form = kwargs.pop('veiculo_form', None)

        vendedor_form = kwargs.pop('vendedor_form', None)

        endereco_form = EnderecoFormSet(request.POST, prefix='endereco_form')
        banco_form = BancoFormSet(request.POST, prefix='banco_form')
        documento_form = DocumentoFormSet(
            request.POST, prefix='documento_form')

        telefone_form = TelefoneFormSet(request.POST, prefix='telefone_form')
        email_form = EmailFormSet(request.POST, prefix='email_form')
        site_form = SiteFormSet(request.POST, prefix='site_form')

        formsets = [telefone_form, email_form, site_form]

        if veiculo_form:
            extra_forms = [veiculo_form, ]

        if vendedor_form:
            extra_forms = [vendedor_form, ]

        if form.is_valid():

            self.object = form.save(commit=False)
            if self.object.tipo_pessoa == 'PJ':
                pessoa_form = PessoaJuridicaForm(
                    request.POST, prefix='pessoa_jur_form')
            else:
                pessoa_form = PessoaFisicaForm(
                    request.POST, prefix='pessoa_fis_form')

            if (all(formset.is_valid() for formset in formsets) and
                pessoa_form.is_valid() and
                endereco_form.is_valid() and
                banco_form.is_valid() and
                documento_form.is_valid() and
                    all(extra_form.is_valid() for extra_form in extra_forms)):

                self.object.save()

                # Salvar informacoes endereco
                endereco_form.instance = self.object
                end = endereco_form.save()
                if len(end):
                    self.object.endereco_padrao = end[0]

                # Salvar informacoes bancarias
                banco_form.instance = self.object
                ban = banco_form.save()
                if len(ban):
                    self.object.banco_padrao = ban[0]

                # Salvar documentos adicionais
                documento_form.instance = self.object
                documento_form.save()

                # salvar telefone
                telefone_form.instance = self.object
                tel = telefone_form.save()
                if len(tel):
                    self.object.telefone_padrao = tel[0]

                # salvar email
                email_form.instance = self.object
                ema = email_form.save()
                if len(ema):
                    self.object.email_padrao = ema[0]

                # salvar site
                site_form.instance = self.object
                sit = site_form.save()
                if len(sit):
                    self.object.site_padrao = sit[0]

                if veiculo_form:
                    veiculo_form.instance = self.object
                    veiculo_form.save()

                if vendedor_form:
                    vendedor_form.instance = self.object
                    vendedor_form.save()

                # salvar objeto criado e pessoa fisica/juridica
                self.object.save()
                pessoa_form.instance.pessoa_id = self.object
                pessoa_form.save()

                return self.form_valid(form)

        pessoa_juridica_form = PessoaJuridicaForm(
            request.POST, prefix='pessoa_jur_form')
        pessoa_fisica_form = PessoaFisicaForm(
            request.POST, prefix='pessoa_fis_form')

        return self.form_invalid(form=form,
                                 pessoa_juridica_form=pessoa_juridica_form,
                                 pessoa_fisica_form=pessoa_fisica_form,
                                 endereco_form=endereco_form,
                                 banco_form=banco_form,
                                 documento_form=documento_form,
                                 formsets=formsets,
                                 vendedor_form=vendedor_form,
                                 veiculo_form=veiculo_form)


class PessoasListView(CustomListView):

    def __init__(self, *args, **kwargs):
        super(PessoasListView, self).__init__(*args, **kwargs)


class EditarPessoaView(CustomUpdateView):

    def get_success_message(self, cleaned_data):
        return self.success_message % dict(cleaned_data, nome_razao_social=self.object.nome_razao_social)

    def get(self, request, form, *args, **kwargs):
        if self.object.tipo_pessoa == 'PJ':
            pessoa_juridica_form = PessoaJuridicaForm(
                instance=self.object, prefix='pessoa_jur_form')
            pessoa_fisica_form = PessoaFisicaForm(prefix='pessoa_fis_form')
        else:
            pessoa_juridica_form = PessoaJuridicaForm(prefix='pessoa_jur_form')
            pessoa_fisica_form = PessoaFisicaForm(
                instance=self.object, prefix='pessoa_fis_form')


        endereco_form = EnderecoFormSet(
            instance=self.object, prefix='endereco_form')
        banco_form = BancoFormSet(instance=self.object, prefix='banco_form')
        documento_form = DocumentoFormSet(
            instance=self.object, prefix='documento_form')

        telefone_form = TelefoneFormSet(
            instance=self.object, prefix='telefone_form')
        email_form = EmailFormSet(instance=self.object, prefix='email_form')
        site_form = SiteFormSet(instance=self.object, prefix='site_form')

        if Telefone.objects.filter(pessoa_tel=self.object.pk).count():
            telefone_form.extra = 0
        if Endereco.objects.filter(pessoa_end=self.object.pk).count():
            endereco_form.extra = 0
        if Email.objects.filter(pessoa_email=self.object.pk).count():
            email_form.extra = 0
        if Site.objects.filter(pessoa_site=self.object.pk).count():
            site_form.extra = 0
        if Banco.objects.filter(pessoa_banco=self.object.pk).count():
            banco_form.extra = 0
        if Documento.objects.filter(pessoa_documento=self.object.pk).count():
            documento_form.extra = 0

        formsets = [telefone_form, email_form, site_form]

        # Caso Empresa
        logo_file = kwargs.pop('logo_file', None)
        # Caso Transportadora
        veiculo_form = kwargs.pop('veiculo_form', None)
        # Caso Fornecedor
        vendedor_form = kwargs.pop('vendedor_form', None)

        return self.render_to_response(self.get_context_data(form=form,
                                                             pessoa_juridica_form=pessoa_juridica_form,
                                                             pessoa_fisica_form=pessoa_fisica_form,
                                                             endereco_form=endereco_form,
                                                             banco_form=banco_form,
                                                             documento_form=documento_form,
                                                             formsets=formsets,
                                                             logo_file=logo_file,
                                                             vendedor_form=vendedor_form,
                                                             veiculo_form=veiculo_form,
                                                             object=self.object))

    def post(self, request, form, *args, **kwargs):
        self.object = self.get_object()
        extra_forms = []
        veiculo_form = kwargs.pop('veiculo_form', None)

        vendedor_form = kwargs.pop('vendedor_form', None)

        endereco_form = EnderecoFormSet(
            request.POST, prefix='endereco_form', instance=self.object)
        banco_form = BancoFormSet(
            request.POST, prefix='banco_form', instance=self.object)
        documento_form = DocumentoFormSet(
            request.POST, prefix='documento_form', instance=self.object)

        telefone_form = TelefoneFormSet(
            request.POST, prefix='telefone_form', instance=self.object)
        email_form = EmailFormSet(
            request.POST, prefix='email_form', instance=self.object)
        site_form = SiteFormSet(
            request.POST, prefix='site_form', instance=self.object)

        formsets = [telefone_form, email_form, site_form]

        if veiculo_form:
            extra_forms = [veiculo_form, ]

        if vendedor_form:
            extra_forms_vendedor = [vendedor_form, ]

        if form.is_valid():
            self.object = form.save(commit=False)
            if self.object.tipo_pessoa == 'PJ':
                pessoa_form = PessoaJuridicaForm(
                    request.POST, prefix='pessoa_jur_form')
            else:
                pessoa_form = PessoaFisicaForm(
                    request.POST, prefix='pessoa_fis_form')

            if (all(formset.is_valid() for formset in formsets) and
                pessoa_form.is_valid() and
                endereco_form.is_valid() and
                banco_form.is_valid() and
                documento_form.is_valid() and
                    all(extra_forms_vendedor.is_valid() for extra_forms_vendedor in extra_forms_vendedor) and
                    all(extra_form.is_valid() for extra_form in extra_forms)):

                self.object = form.save(commit=False)
                self.object.save()

                if self.object.tipo_pessoa == 'PJ':
                    # Remover pessoa fisica da DB se existir
                    PessoaFisica.objects.filter(
                        pessoa_id=self.object.pk).delete()
                else:
                    # Remover pessoa juridica da DB se existir
                    PessoaJuridica.objects.filter(
                        pessoa_id=self.object.pk).delete()

                # Salvar informacoes endereco
                endereco_form.instance = self.object
                end = endereco_form.save()
                if len(end):
                    self.object.endereco_padrao = end[0]

                # Salvar informacoes bancarias
                banco_form.instance = self.object
                ban = banco_form.save()
                if len(ban):
                    self.object.banco_padrao = ban[0]

                # Salvar documentos adicionais
                documento_form.instance = self.object
                documento_form.save()

                # Salvar telefone
                telefone_form.instance = self.object
                tel = telefone_form.save()
                if len(tel):
                    self.object.telefone_padrao = tel[0]

                # Salvar email
                email_form.instance = self.object
                ema = email_form.save()
                if len(ema):
                    self.object.email_padrao = ema[0]

                # Salvar site
                site_form.instance = self.object
                sit = site_form.save()
                if len(sit):
                    self.object.site_padrao = sit[0]

                if veiculo_form:
                    veiculo_form.instance = self.object
                    veiculo_form.save()

                if vendedor_form:
                    vendedor_form.instance = self.object
                    vendedor_form.save()

                # salvar objeto criado e pessoa fisica/juridica
                self.object.save()
                pessoa_form.instance.pessoa_id = self.object
                pessoa_form.save()

                return self.form_valid(form)

        logo_file = kwargs.pop('logo_file', None)

        if self.object.tipo_pessoa == 'PJ':
            pessoa_juridica_form = PessoaJuridicaForm(
                request.POST, prefix='pessoa_jur_form', instance=self.object)
            pessoa_fisica_form = PessoaFisicaForm(
                request.POST, prefix='pessoa_fis_form')
        else:
            pessoa_juridica_form = PessoaJuridicaForm(
                request.POST, prefix='pessoa_jur_form')
            pessoa_fisica_form = PessoaFisicaForm(
                request.POST, prefix='pessoa_fis_form', instance=self.object)

        return self.form_invalid(form=form,
                                 pessoa_juridica_form=pessoa_juridica_form,
                                 pessoa_fisica_form=pessoa_fisica_form,
                                 endereco_form=endereco_form,
                                 banco_form=banco_form,
                                 documento_form=documento_form,
                                 formsets=formsets,
                                 vendedor_form=vendedor_form,
                                 veiculo_form=veiculo_form,
                                 logo_file=logo_file)

Erro

Environment:

Request Method: POST
Request URL: http://127.0.0.1:8000/cadastro/fornecedor/editar/3/

Django Version: 2.2.2
Python Version: 3.5.3
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'masterpy.apps.base',
'masterpy.apps.login',
'masterpy.apps.cadastro',
'masterpy.apps.vendas',
'masterpy.apps.compras',
'masterpy.apps.fiscal',
'masterpy.apps.financeiro',
'masterpy.apps.estoque']
Installed 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',
'masterpy.middleware.LoginRequiredMiddleware']

Traceback:

File "/home/lgustav/PycharmProjects/masterpy/venv/lib/python3.5/site-packages/django/core/handlers/exception.py" in inner
34. response = get_response(request)

File "/home/lgustav/PycharmProjects/masterpy/venv/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response
115. response = self.process_exception_by_middleware(e, request)

File "/home/lgustav/PycharmProjects/masterpy/venv/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response
113. response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/home/lgustav/PycharmProjects/masterpy/venv/lib/python3.5/site-packages/django/views/generic/base.py" in view
71. return self.dispatch(request, *args, **kwargs)

File "/home/lgustav/PycharmProjects/masterpy/masterpy/apps/base/views_mixins.py" in dispatch
34. return super(CheckPermissionMixin, self).dispatch(request, *args, **kwargs)

File "/home/lgustav/PycharmProjects/masterpy/venv/lib/python3.5/site-packages/django/views/generic/base.py" in dispatch
97. return handler(request, *args, **kwargs)

File "/home/lgustav/PycharmProjects/masterpy/masterpy/apps/cadastro/views/fornecedor.py" in post
96. request, form, vendedor_form=vendedor_form, *args, **kwargs)

File "/home/lgustav/PycharmProjects/masterpy/masterpy/apps/cadastro/views/base.py" in post
271. all(extra_forms_vendedor.is_valid() for extra_forms_vendedor in extra_forms_vendedor) and

File "/home/lgustav/PycharmProjects/masterpy/masterpy/apps/cadastro/views/base.py" in
271. all(extra_forms_vendedor.is_valid() for extra_forms_vendedor in extra_forms_vendedor) and

File "/home/lgustav/PycharmProjects/masterpy/venv/lib/python3.5/site-packages/django/forms/formsets.py" in is_valid
301. self.errors

File "/home/lgustav/PycharmProjects/masterpy/venv/lib/python3.5/site-packages/django/forms/formsets.py" in errors
281. self.full_clean()

File "/home/lgustav/PycharmProjects/masterpy/venv/lib/python3.5/site-packages/django/forms/formsets.py" in full_clean
322. for i in range(0, self.total_form_count()):

File "/home/lgustav/PycharmProjects/masterpy/venv/lib/python3.5/site-packages/django/forms/formsets.py" in total_form_count
110. return min(self.management_form.cleaned_data[TOTAL_FORM_COUNT], self.absolute_max)

File "/home/lgustav/PycharmProjects/masterpy/venv/lib/python3.5/site-packages/django/utils/functional.py" in get
80. res = instance.dict[self.name] = self.func(instance)

File "/home/lgustav/PycharmProjects/masterpy/venv/lib/python3.5/site-packages/django/forms/formsets.py" in management_form
92. code='missing_management_form',

Exception Type: ValidationError at /cadastro/fornecedor/editar/3/
Exception Value: ['Os dados do ManagementForm não foram encontrados ou foram adulterados']

Nfe 4.0

Parabéns pelo excelente projeto, porém gostaria de saber se já existe um previsão de atualização da biblioteca para versão 4.0 da Nfe??

Erro de comunicação SEFAZ

Olá, importei meu certificado pelo app e inseri a senha corretamente. Porém, ao tentar fazer a comunicação com o SEFAZ está ocorrendo o seguinte erro " Erro de autenticação: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1051) ". Tenho certeza absoluta que a senha esta correta :D :D :D

SSL: CERTIFICATE_VERIFY_FAILED

Request Method: POST
http://localhost:8000/fiscal/notafiscal/consultarnota/10/
1.11.6
SSLError
[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:720)
/usr/lib/python3.5/ssl.py in do_handshake, line 641
/home/chrmorais/SolluxLabs/djSIGE/venv/bin/python
3.5.3
['/home/chrmorais/SolluxLabs/djSIGE', '/home/chrmorais/SolluxLabs', '/home/chrmorais/SolluxLabs/djSIGE', '/home/chrmorais/SolluxLabs/djSIGE/venv/lib/python35.zip', '/home/chrmorais/SolluxLabs/djSIGE/venv/lib/python3.5', '/home/chrmorais/SolluxLabs/djSIGE/venv/lib/python3.5/plat-x86_64-linux-gnu', '/home/chrmorais/SolluxLabs/djSIGE/venv/lib/python3.5/lib-dynload', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-x86_64-linux-gnu', '/home/chrmorais/SolluxLabs/djSIGE/venv/lib/python3.5/site-packages', '/home/chrmorais/SolluxLabs/djSIGE/venv/lib/python3.5/site-packages/PySIGNFe-0.1.0-py3.5.egg']
Qua, 18 Out 2017 22:01:13 -0200

Estou com problemas na instalação

Boa tarde vê se podem me ajudar, estou tentando instalar o programa, mas quando faço o comando
python manage.py migrate ele dá esse erro abaixo:
Alguém sabe me dizer o porque?
ERRORS:
cadastro.Categoria: (auth.E005) The permission codenamed 'view_categoria' clashes with a builtin permission for model 'cadastro.Categoria'.
cadastro.Cliente: (auth.E005) The permission codenamed 'view_cliente' clashes with a builtin permission for model 'cadastro.Cliente'.
cadastro.Empresa: (auth.E005) The permission codenamed 'view_empresa' clashes with a builtin permission for model 'cadastro.Empresa'.
cadastro.Fornecedor: (auth.E005) The permission codenamed 'view_fornecedor' clashes with a builtin permission for model 'cadastro.Fornecedor'.
cadastro.Marca: (auth.E005) The permission codenamed 'view_marca' clashes with a builtin permission for model 'cadastro.Marca'.
cadastro.Produto: (auth.E005) The permission codenamed 'view_produto' clashes with a builtin permission for model 'cadastro.Produto'.
cadastro.Transportadora: (auth.E005) The permission codenamed 'view_transportadora' clashes with a builtin permission for model 'cadastro.Transportadora'.
cadastro.Unidade: (auth.E005) The permission codenamed 'view_unidade' clashes with a builtin permission for model 'cadastro.Unidade'.
compras.OrcamentoCompra: (auth.E005) The permission codenamed 'view_orcamentocompra' clashes with a builtin permission for model 'compras.OrcamentoCompra'.
compras.PedidoCompra: (auth.E005) The permission codenamed 'view_pedidocompra' clashes with a builtin permission for model 'compras.PedidoCompra'.
estoque.LocalEstoque: (auth.E005) The permission codenamed 'view_localestoque' clashes with a builtin permission for model 'estoque.LocalEstoque'.
estoque.MovimentoEstoque: (auth.E005) The permission codenamed 'view_movimentoestoque' clashes with a builtin permission for model 'estoque.MovimentoEstoque'.
financeiro.Lancamento: (auth.E005) The permission codenamed 'view_lancamento' clashes with a builtin permission for model 'financeiro.Lancamento'.
financeiro.PlanoContasGrupo: (auth.E005) The permission codenamed 'view_planocontasgrupo' clashes with a builtin permission for model 'financeiro.PlanoContasGrupo'.
fiscal.GrupoFiscal: (auth.E005) The permission codenamed 'view_grupofiscal' clashes with a builtin permission for model 'fiscal.GrupoFiscal'.
fiscal.NaturezaOperacao: (auth.E005) The permission codenamed 'view_naturezaoperacao' clashes with a builtin permission for model 'fiscal.NaturezaOperacao'.
fiscal.NotaFiscalEntrada: (auth.E005) The permission codenamed 'view_notafiscalentrada' clashes with a builtin permission for model 'fiscal.NotaFiscalEntrada'.
vendas.CondicaoPagamento: (auth.E005) The permission codenamed 'view_condicaopagamento' clashes with a builtin permission for model 'vendas.CondicaoPagamento'.
vendas.OrcamentoVenda: (auth.E005) The permission codenamed 'view_orcamentovenda' clashes with a builtin permission for model 'vendas.OrcamentoVenda'.
vendas.PedidoVenda: (auth.E005) The permission codenamed 'view_pedidovenda' clashes with a builtin permission for model 'vendas.PedidoVenda'.

Estoque fica incorreto se for editar um documento.

Bom dia amigos!
Vi seu projeto no github e achei fantástico!
Vi como vocês simplificaram a movimentação de estoque usando signals.
Minha observação é a seguinte:

Supondo que eu crie um pedido e transforme em nota ele movimentaria o estoque. Ótimo, faz isso certinho.

Agora suponha que eu fiz alguma coisa errada nessa nota e preciso alterar a quantidade do item que de alguma maneira fiz errado. Neste momento o sistema vai dar saída novamente das quantidades, ou seja, o estoque ficará errado.

Amigos, estou aprendendo django e tomei seu código como modelo para mim. Minha sugestão é meramente baseada em usabilidade e com a intenção de ver a sua solução para que eu possa aprender com vocês.

Espero sua compreensão e se corrigir por favor me avisa, gostaria muito de aprender como vocês fizeram.

Abraço.

Não gera movimento de caixa ao informar a data de pagamento na Conta a Receber

Em uma Conta a Receber com CheckBox "Movimentar caixa" em TRUE, ao clicar no botão "Receber" e informar a a data de pagamento o sistema não Gera o Movimento de Caixa se este não existir na relação Entrada x Movimento de caixa.

Como correção implementei isto em views\lancamento.py linha 600
if mvmt:
# Caso ainda não tenha movimento de caixa
if object.movimento_caixa == None:
self.adicionar_novo_movimento_caixa(
lancamento=object, novo_movimento=mvmt)
mvmt.save()
object.movimento_caixa = mvmt
object.save()

Relatórios

Estou começando agora a mexer no sistema e não encontro lugar para realizar relatórios. Se confirmarem logo eu vou ver se consigo lançar aqui essa função.

Menu lateral

Alguém sabe me dizer como redimensiono o menu lateral (abaixo do usuário). Na minha resolução de tela, a parte do estoque não fica visível.

PS - Sou novato na programação de sistemas web.

Alterar cor nav-bar

Gostaria de editar o tema azul para outra cor, mas não estou conseguindo editar as cores, onde consigo editar isso?

Erro ao inicar

Bom dia,

estou seguindo os passos de instalação, quando executo o comando:

python manage.py runserver

e tendo entrar no sistema , ele abre uma janela informando que o python parou de funcionar e para o sistema.

o que pode ser ?

Esqueceu a senha?

Olá,

Primeiro meus parabéns, iniciativa muito boa, gostaria de uma ajuda estou fazendo uns estudo e na views.py login enviar e-mail para nova senha esta apresentando a seguinte mensagem:

Reverse for 'trocarsenhaview' with keyword arguments '{'uidb64': b'MQ', 'token': '4yy-dd6d8f5c2e0f19763bfc'}' not found. 1 pattern(s) tried: ['login/trocarsenha/(?P[0-9A-Za-z]+)-(?P.+)$']

segue abaixo meus parametros de configração de e-mail.

EMAIL_HOST = 'smtp.sendgrid.net'

EMAIL_HOST_USER = '********@sendgrid.net'

EMAIL_HOST_PASSWORD = '********'

EMAIL_PORT = 587

EMAIL_USE_TLS = True

Agradeço ajuda
João Neto

Estrutura do projeto, criação e modificações de app

Estou com problema pra entender a estrutura do projeto, já que ele tem vários sub níveis e eu só avia feito projetos mais simples seguindo tutoriais e cursos online.

Alguém poderia me ajudar com o processo de criação de um aplicativo nesse projeto utilizando os níveis corretos?

E se eu precisar desativar um app ou mudar o nome, qual seria o procedimento?

sei que é muita informação, então se alguém poder me auxiliar ficarei muito grato.

Caso alguém me mande ir estudar a documentação do django ou treinar mais apps, é exatamente isso que venho fazendo. mais como a informação é nova, ainda não é natural pra mim, principalmente em um projeto mais complexo e para avançar a gente tem que se desafiar. tmj!

Erro no migrate

Oi Tudo bem?

Estou tentando rodar pela primeira vez e ao rodar o python manage.py migrate acontece esse erro

(venv) G:\repos\djangoSIGE>python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, cadastro, compras, contenttypes, estoque, financeiro, fiscal, login, sessions, vendas
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying login.0001_initial... OK
  Applying cadastro.0001_initial... OK
  Applying estoque.0001_initial... OK
  Applying vendas.0001_initial... OK
  Applying compras.0001_initial... OK
  Applying compras.0002_auto_20170625_1450... OK
  Applying fiscal.0001_initial... OK
  Applying cadastro.0002_auto_20170625_1450... OK
  Applying cadastro.0003_auto_20170714_1703... OK
  Applying cadastro.0004_auto_20170820_1448... OK
  Applying compras.0003_auto_20170820_1448... OK
  Applying estoque.0002_initial_data...Installed 1 object(s) from 1 fixture(s)
 OK
  Applying estoque.0002_auto_20170625_1450... OK
  Applying estoque.0003_merge_20170625_1454... OK
  Applying estoque.0004_auto_20170820_1448... OK
  Applying financeiro.0001_initial... OK
  Applying financeiro.0002_auto_20170820_1448... OK
  Applying financeiro.0003_auto_20170820_1808... OK
  Applying fiscal.0002_auto_20170820_1448... OK
  Applying fiscal.0003_auto_20170915_0904... OK
  Applying sessions.0001_initial... OK
  Applying vendas.0002_auto_20170820_1448... OK
Traceback (most recent call last):
  File "G:\repos\djangoSIGE\venv\lib\site-packages\django\db\backends\utils.py", line 85, in _execute
    return self.cursor.execute(sql, params)
psycopg2.errors.UniqueViolation: duplicate key value violates unique constraint "auth_permission_content_type_id_codename_01ab375a_uniq"
DETAIL:  Key (content_type_id, codename)=(9, view_categoria) already exists.


The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "manage.py", line 23, in <module>
    execute_from_command_line(sys.argv)
  File "G:\repos\djangoSIGE\venv\lib\site-packages\django\core\management\__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "G:\repos\djangoSIGE\venv\lib\site-packages\django\core\management\__init__.py", line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "G:\repos\djangoSIGE\venv\lib\site-packages\django\core\management\base.py", line 316, in run_from_argv
    self.execute(*args, **cmd_options)
  File "G:\repos\djangoSIGE\venv\lib\site-packages\django\core\management\base.py", line 353, in execute
    output = self.handle(*args, **options)
  File "G:\repos\djangoSIGE\venv\lib\site-packages\django\core\management\base.py", line 83, in wrapped
    res = handle_func(*args, **kwargs)
  File "G:\repos\djangoSIGE\venv\lib\site-packages\django\core\management\commands\migrate.py", line 226, in handle
    self.verbosity, self.interactive, connection.alias, apps=post_migrate_apps, plan=plan,
  File "G:\repos\djangoSIGE\venv\lib\site-packages\django\core\management\sql.py", line 51, in emit_post_migrate_signal
    **kwargs
  File "G:\repos\djangoSIGE\venv\lib\site-packages\django\dispatch\dispatcher.py", line 175, in send
    for receiver in self._live_receivers(sender)
  File "G:\repos\djangoSIGE\venv\lib\site-packages\django\dispatch\dispatcher.py", line 175, in <listcomp>
    for receiver in self._live_receivers(sender)
  File "G:\repos\djangoSIGE\venv\lib\site-packages\django\contrib\auth\management\__init__.py", line 79, in create_permissions
    Permission.objects.using(using).bulk_create(perms)
  File "G:\repos\djangoSIGE\venv\lib\site-packages\django\db\models\query.py", line 465, in bulk_create
    ids = self._batched_insert(objs_without_pk, fields, batch_size)
  File "G:\repos\djangoSIGE\venv\lib\site-packages\django\db\models\query.py", line 1149, in _batched_insert
    inserted_id = self._insert(item, fields=fields, using=self.db, return_id=True)
  File "G:\repos\djangoSIGE\venv\lib\site-packages\django\db\models\query.py", line 1136, in _insert
    return query.get_compiler(using=using).execute_sql(return_id)
  File "G:\repos\djangoSIGE\venv\lib\site-packages\django\db\models\sql\compiler.py", line 1289, in execute_sql
    cursor.execute(sql, params)
  File "G:\repos\djangoSIGE\venv\lib\site-packages\django\db\backends\utils.py", line 100, in execute
    return super().execute(sql, params)
  File "G:\repos\djangoSIGE\venv\lib\site-packages\django\db\backends\utils.py", line 68, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "G:\repos\djangoSIGE\venv\lib\site-packages\django\db\backends\utils.py", line 77, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "G:\repos\djangoSIGE\venv\lib\site-packages\django\db\backends\utils.py", line 85, in _execute
    return self.cursor.execute(sql, params)
  File "G:\repos\djangoSIGE\venv\lib\site-packages\django\db\utils.py", line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "G:\repos\djangoSIGE\venv\lib\site-packages\django\db\backends\utils.py", line 85, in _execute
    return self.cursor.execute(sql, params)
django.db.utils.IntegrityError: duplicate key value violates unique constraint "auth_permission_content_type_id_codename_01ab375a_uniq"
DETAIL:  Key (content_type_id, codename)=(9, view_categoria) already exists.

Definir a versão dos pre-requisitos mais claramente

Tentei rodar com Python 3.x e Django 2.x e teve milhões de inconsistências, depois de corrigir tudo descobri que o Geraldo simplesmente não roda em Python 3.x. Desisti e tive que voltar para o Python 2.x e o Django 1.x...

Acho que instruções com avisos claros de que não funciona em versões mais recentes ajudariam os mais inexperientes a colocar o sistema de pé com mais facilidade... e poupariam o trabalho no caso dos cabeça-duras como eu. ;-)

Tabela CSV de DF

Olá, saberiam me informar por algum motivo ao selecionar o estado do DF não é carregado os municipios/unidades administrativas, quando tento cadastrar uma empresa?

produção

alguém sabe como coloco em produção python manage.py runserver sem ser o endereço 127.0.0.1:8000 mudar para meuipexterno:8000

Problema com o Chrome

Boa noite,

testei no Chrome e não está funcionando corretamente. Algo relacionado a css/js?

Mozilla e IE estão ok.

Acredito que não seja um problema em minha maquina, alguem concorda comigo?

Parabéns pelo projeto!!

Número de versões

Seria interessante trabalhar com número de versões para o instalador do pip e a imagem do docker

Integrar projeto com C.I

Fazer a integração do projeto com alguma ferramenta de C.I para rodar os testes, por exemplo o Travis.

Erro na emissão de NFe

Estou realizando testes e estou recebendo a tela de erro na emissão de NFe:

Request Method: POST
http://localhost:8000/fiscal/notafiscal/emitir/6/
1.11.6
OSError
Error reading file '/home/chrmorais/SolluxLabs/djSIGE/venv/lib/python3.5/site-packages/pysignfe/nfe/manual_600/schema/PL_008i2/consSitNFe_v3.10.xsd': failed to load external entity "/home/chrmorais/SolluxLabs/djSIGE/venv/lib/python3.5/site-packages/pysignfe/nfe/manual_600/schema/PL_008i2/consSitNFe_v3.10.xsd"
/home/chrmorais/SolluxLabs/djSIGE/venv/lib/python3.5/site-packages/pysignfe/xml_sped/base.py in validar, line 880
/home/chrmorais/SolluxLabs/djSIGE/venv/bin/python
3.5.3
['/home/chrmorais/SolluxLabs/djSIGE', '/home/chrmorais/SolluxLabs', '/home/chrmorais/SolluxLabs/djSIGE', '/home/chrmorais/SolluxLabs/djSIGE/venv/lib/python35.zip', '/home/chrmorais/SolluxLabs/djSIGE/venv/lib/python3.5', '/home/chrmorais/SolluxLabs/djSIGE/venv/lib/python3.5/plat-x86_64-linux-gnu', '/home/chrmorais/SolluxLabs/djSIGE/venv/lib/python3.5/lib-dynload', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-x86_64-linux-gnu', '/home/chrmorais/SolluxLabs/djSIGE/venv/lib/python3.5/site-packages', '/home/chrmorais/SolluxLabs/djSIGE/venv/lib/python3.5/site-packages/PySIGNFe-0.1.0-py3.5.egg']
Sex, 13 Out 2017 13:55:29 -0300

Uso Comercial

Oi, bom dia, Thiago
Gostaria de Utilizar seu sistema DjangoSIGE comercialmente, mas como sou apenas um Técnico, não tenho condições necessitaria para Instalação como deve ser; Existe possibilidade de ter uma Base de Instalação tipo 'Automática', tipo em interface Gráfica.... para melhor aplicação na prática?
Meu nome é Glaucio Grando, crie o usuário H3MCONSULTORIA no Github... tou dando os primeiros passos ainda...
Ja tinha solicitado ajuda por email(e outro dia vou ver contigo), e estou testando essa opção "Issues"...Só para esclarecimento, eu procuro a muito tempo um sistema na NUVEM... mas todos que encontrei "acho na minha opinião" muito complexo e cheio de opções, cheguei no teu por estar iniciando\pensando em 'programar em Python, e achei o teu "Muito Simples, direto no ponto e tem somente ferramentas que realmente as Empresas vão usar... e digo pela minha experiencia no "campo"... em alguns casos pode ser eliminado várias coisas ainda, para tu ter uma noção do que essas empresa utilizam.
Glaucio Grando

Não entendi o motivo de ter cadastro de Empresas

Olá amigo, estou tentando entender o sistema...

Não consegui entender o motivo de ter cadastro de empresas.. pelo que eu entendi o sistema funciona da seguinte maneira... Cada usuário tem um cadastro de produtos/clientes e etc... então cada Usuário, seria uma "Empresa" não é?

Porque mesmo cadastrando 2 empresas, e mudando no Perfil que o usuário vai ser da Empresa 2, os produtos cadastrados na Empresa 1, continuam lá...

Poderia me explicar o motivo desse cadastro de empresa?

Obrigado.

Dúvida com os passos 2 e 3

Boa noite!!

Como efetuar os passos 2 e 3?

Edite o conteúdo do arquivo djangosige/configs/configs.py

Gere um .env local

Deploy no Heroku com erro

Estou tentando fazer deploy em uma conta grátis, para poder usar no navegador, online, quando quiser, porém estou recebendo o seguinte erro.

Traceback (most recent call last):
File "manage.py", line 23, in
execute_from_command_line(sys.argv)
File "/app/.heroku/python/lib/python3.6/site-packages/django/core/management/init.py", line 371, in execute_from_command_line
utility.execute()
File "/app/.heroku/python/lib/python3.6/site-packages/django/core/management/init.py", line 317, in execute
settings.INSTALLED_APPS
File "/app/.heroku/python/lib/python3.6/site-packages/django/conf/init.py", line 56, in getattr
self._setup(name)
File "/app/.heroku/python/lib/python3.6/site-packages/django/conf/init.py", line 43, in _setup
self._wrapped = Settings(settings_module)
File "/app/.heroku/python/lib/python3.6/site-packages/django/conf/init.py", line 106, in init
mod = importlib.import_module(self.SETTINGS_MODULE)
File "/app/.heroku/python/lib/python3.6/importlib/init.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "", line 994, in _gcd_import
File "", line 971, in _find_and_load
File "", line 955, in _find_and_load_unlocked
File "", line 665, in _load_unlocked
File "", line 678, in exec_module
File "", line 219, in _call_with_frames_removed
File "/app/djangosige/configs/init.py", line 3, in
from .settings import *
File "/app/djangosige/configs/settings.py", line 4, in
from .configs import DEFAULT_DATABASE_URL, DEFAULT_FROM_EMAIL, EMAIL_HOST, EMAIL_HOST_USER, EMAIL_HOST_PASSWORD, EMAIL_PORT, EMAIL_USE_TLS
ModuleNotFoundError: No module named 'djangosige.configs.configs'

O que pode ser? Existe uma hospedagem grátis melhor que o heroku para esse projeto?

Permissões

Galera tudo bom? Estou vendo as permissões aqui não estão aparecendo. Alguém poderia me ajudar ou informar o que esta de errado? vlw muito obrigado

Cadastramento de informações

Ao clicar em NOVO para cadastrar qualquer informação no banco (Empresa, Pessoa, Produto e entre outros) aparece a seguinte mensagem:

DjangoUnicodeDecodeError at /cadastro/empresa/adicionar/

'ascii' codec can't decode byte 0xc3 in position 3: ordinal not in range(128). You passed in <django.utils.functional.proxy object at 0x7fadacaa3c10> (<class 'django.utils.functional.proxy'>)

Problemas em Deploy com PostgreSQL

Ao tentar fazer um deploy com o banco postgresql, recebo a seguinte mensagem
no comando migrate.

SystemCheckError: System check identified some issues:

ERRORS:
cadastro.Categoria: (auth.E005) The permission codenamed 'view_categoria' clashes with a builtin permission for model 'cadastro.Categoria'.
cadastro.Cliente: (auth.E005) The permission codenamed 'view_cliente' clashes with a builtin permission for model 'cadastro.Cliente'.
cadastro.Empresa: (auth.E005) The permission codenamed 'view_empresa' clashes with a builtin permission for model 'cadastro.Empresa'.
cadastro.Fornecedor: (auth.E005) The permission codenamed 'view_fornecedor' clashes with a builtin permission for model 'cadastro.Fornecedor'.
cadastro.Marca: (auth.E005) The permission codenamed 'view_marca' clashes with a builtin permission for model 'cadastro.Marca'.
cadastro.Produto: (auth.E005) The permission codenamed 'view_produto' clashes with a builtin permission for model 'cadastro.Produto'.
cadastro.Transportadora: (auth.E005) The permission codenamed 'view_transportadora' clashes with a builtin permission for model 'cadastro.Transportadora'.
cadastro.Unidade: (auth.E005) The permission codenamed 'view_unidade' clashes with a builtin permission for model 'cadastro.Unidade'.
compras.OrcamentoCompra: (auth.E005) The permission codenamed 'view_orcamentocompra' clashes with a builtin permission for model 'compras.OrcamentoCompra'.
compras.PedidoCompra: (auth.E005) The permission codenamed 'view_pedidocompra' clashes with a builtin permission for model 'compras.PedidoCompra'.
estoque.LocalEstoque: (auth.E005) The permission codenamed 'view_localestoque' clashes with a builtin permission for model 'estoque.LocalEstoque'.
estoque.MovimentoEstoque: (auth.E005) The permission codenamed 'view_movimentoestoque' clashes with a builtin permission for model 'estoque.MovimentoEstoque'.
financeiro.Lancamento: (auth.E005) The permission codenamed 'view_lancamento' clashes with a builtin permission for model 'financeiro.Lancamento'.
financeiro.PlanoContasGrupo: (auth.E005) The permission codenamed 'view_planocontasgrupo' clashes with a builtin permission for model 'financeiro.PlanoContasGrupo'.
fiscal.GrupoFiscal: (auth.E005) The permission codenamed 'view_grupofiscal' clashes with a builtin permission for model 'fiscal.GrupoFiscal'.
fiscal.NaturezaOperacao: (auth.E005) The permission codenamed 'view_naturezaoperacao' clashes with a builtin permission for model 'fiscal.NaturezaOperacao'.
fiscal.NotaFiscalEntrada: (auth.E005) The permission codenamed 'view_notafiscalentrada' clashes with a builtin permission for model 'fiscal.NotaFiscalEntrada'.
vendas.CondicaoPagamento: (auth.E005) The permission codenamed 'view_condicaopagamento' clashes with a builtin permission for model 'vendas.CondicaoPagamento'.
vendas.OrcamentoVenda: (auth.E005) The permission codenamed 'view_orcamentovenda' clashes with a builtin permission for model 'vendas.OrcamentoVenda'.
vendas.PedidoVenda: (auth.E005) The permission codenamed 'view_pedidovenda' clashes with a builtin permission for model 'vendas.PedidoVenda'.

Ajuda como o Digital Ocean

alguem poderia me ajudar com a configuração do djangoSIGE no digitalocean?

to a varios dias tentando deixar ele online mais sem sucesso.

quando coloco o default.conf no etc/nginx/sites-available e fasso o link simbolico, meu nginx para

alguem poderia me explicar o processo passo a passo, pois ate agora so fiz alguns cursos com aplicativos simples e percebo que o dejangoSIGE é bem robusto e a configuração esta diferente.

é capas dele esta configurado tudo automatizado e eu to deixando passar alguma coisa por falta de conhecimento.

NFe e NFCe

Olá, esse sistema já está funcional para emissão de nfe e nfce versão 4?

Requisitos do modulo "Fiscal"

capturar

Ao executar algumas funcionalidades do modulo Fiscal, ex. emitir nota, este erro é apresentado.

Ao analisar o código, verifiquei que as bibliotecas "OpenSSL", "pytz" e "lxml" são requeridas pelo modulo Fiscal. Após a instalação, o sistema voltou a funcionar normalmente.

Acho que seria interessante adicionar estas bibliotecas no arquivo "requirements.txt".

Não carrega

Realizei os procedimentos para instalação, rodei o server tranquilamente. Mas quando acesso o link localhost no navegador, o runserver para sem apresentar nenhum erro. Alguém sabe o que pode ser?

Erro ao importar arquivo XML de NFE

Quando tento importar um arquivo xml de NFe o sistema gera a mensagem de erro:
... djangosige/apps/fiscal/views/nota_fiscal.py", line 522, in post
processador_nota = ProcessadorNotaFiscal()
NameError: name 'ProcessadorNotaFiscal' is not defined

Como posso corrigir isso?

Criar db_backup.json

@thiagopena talvez seria legal vc criar um db_backup.json do seu banco de teste para que não quemos perdendo tempo inserindo dados na hora de fazer testes , no Makefile eu deixei um comando que auxilia essa tarefa .

Problema com novos urls

Olá,
estou fazendo um teste com novo rrelatorio no modulo venda para gerar um contrato de compra e venda porem apresenta um erro somnte em produção no ambinte de desenvolvimento esta ok,
alterei urls.py , a view vendas.py,init.py (cendas/views) e pedido_venda_edit.html.

esta e a mensagem de erro:

"Reverse for 'gerarpdfpedidovenda2' not found. 'gerarpdfpedidovenda2' is not a valid view function or pattern name."

Alguém pode me ajudar?

Grato,

João

Erro de comunicação

Olá, estou com o seguinte erro ao tentar fazer um teste de comunicação com o SEFAZ

`

Request Method: POST
http://127.0.0.1:8000/fiscal/notafiscal/consultarcadastro/
2.1.3
ConnectionResetError
[Errno 54] Connection reset by peer
/Users/robertow/.pyenv/versions/3.5.0/lib/python3.5/ssl.py in do_handshake, line 628
/Users/robertow/.pyenv/versions/3.5.0/bin/python3.5
3.5.0

`

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.