예제 #1
0
    def post(self, request, *args, **kwargs):
        self.object = None
        # Tirar . dos campos decimais
        req_post = request.POST.copy()

        for key in req_post:
            if ('venda' in key or
                'custo' in key or
                'estoque_minimo' in key or
                    'estoque_atual' in key):
                req_post[key] = req_post[key].replace('.', '')

        if 'EX:' in req_post['ncm']:
            ncm = req_post['ncm'][0:8]
            ex_start = req_post['ncm'].find('EX:') + 3
            ex_end = req_post['ncm'].find(']')
            ex_tipi = req_post['ncm'][ex_start:ex_end]
            req_post['ncm'] = ncm + ex_tipi

        request.POST = req_post

        form_class = self.get_form_class()
        form = self.get_form(form_class)

        if form.is_valid():
            self.object = form.save(commit=False)

            if self.object.controlar_estoque and form.cleaned_data['estoque_inicial'] > 0:
                # Gerar movimento de estoque inicial
                mov_inicial = EntradaEstoque()
                item_entrada = ItensMovimento()
                prod_estocado = ProdutoEstocado()

                mov_inicial.data_movimento = datetime.now().date()
                mov_inicial.quantidade_itens = 1
                mov_inicial.tipo_movimento = u'3'
                mov_inicial.observacoes = ''
                mov_inicial.valor_total = round(
                    self.object.venda * form.cleaned_data['estoque_inicial'], 2)

                if form.cleaned_data['fornecedor']:
                    mov_inicial.fornecedor = Fornecedor.objects.get(
                        id=form.cleaned_data['fornecedor'])
                if form.cleaned_data['local_dest']:
                    mov_inicial.local_dest = form.cleaned_data['local_dest']

                item_entrada.quantidade = form.cleaned_data['estoque_inicial']
                item_entrada.valor_unit = self.object.venda
                item_entrada.subtotal = mov_inicial.valor_total

                prod_estocado.local = mov_inicial.local_dest
                prod_estocado.quantidade = form.cleaned_data['estoque_inicial']

                self.object.estoque_atual = form.cleaned_data[
                    'estoque_inicial']
                self.object.save()
                mov_inicial.save()

                item_entrada.movimento_id = mov_inicial
                item_entrada.produto = self.object
                item_entrada.save()

                prod_estocado.produto = self.object
                prod_estocado.save()

            else:
                self.object.save()

            return self.form_valid(form)

        return self.form_invalid(form)
예제 #2
0
    def post(self, request, *args, **kwargs):
        self.object = None
        # Tirar . dos campos decimais
        req_post = request.POST.copy()

        for key in req_post:
            if ('venda' in key or 'custo' in key or 'estoque_minimo' in key
                    or 'estoque_atual' in key):
                req_post[key] = req_post[key].replace('.', '')

        if 'EX:' in req_post['ncm']:
            ncm = req_post['ncm'][0:8]
            ex_start = req_post['ncm'].find('EX:') + 3
            ex_end = req_post['ncm'].find(']')
            ex_tipi = req_post['ncm'][ex_start:ex_end]
            req_post['ncm'] = ncm + ex_tipi

        request.POST = req_post

        form_class = self.get_form_class()
        form = self.get_form(form_class)
        acomodacao_form = ProdutoAcomodacaoFormSet(request.POST,
                                                   prefix='acomodacao_form')
        cidade_form = ProdutoCidadeFormSet(request.POST, prefix='cidade_form')
        documento_form = DocumentoProdutoFormSet(request.POST,
                                                 request.FILES,
                                                 prefix='documento_form')

        formsets = [acomodacao_form, cidade_form]

        if form.is_valid():
            self.object = form.save(commit=False)

            if self.object.controlar_estoque and form.cleaned_data[
                    'estoque_inicial'] > 0:
                # Gerar movimento de estoque inicial
                mov_inicial = EntradaEstoque()
                item_entrada = ItensMovimento()
                prod_estocado = ProdutoEstocado()

                mov_inicial.data_movimento = datetime.now().date()
                mov_inicial.quantidade_itens = 1
                mov_inicial.tipo_movimento = u'3'
                mov_inicial.observacoes = ''
                mov_inicial.valor_total = round(
                    self.object.venda * form.cleaned_data['estoque_inicial'],
                    2)

                if form.cleaned_data['fornecedor']:
                    mov_inicial.fornecedor = Fornecedor.objects.get(
                        id=form.cleaned_data['fornecedor'])
                if form.cleaned_data['local_dest']:
                    mov_inicial.local_dest = form.cleaned_data['local_dest']

                item_entrada.quantidade = form.cleaned_data['estoque_inicial']
                item_entrada.valor_unit = self.object.venda
                item_entrada.subtotal = mov_inicial.valor_total

                prod_estocado.local = mov_inicial.local_dest
                prod_estocado.quantidade = form.cleaned_data['estoque_inicial']

                self.object.estoque_atual = form.cleaned_data[
                    'estoque_inicial']
                self.object.save()
                mov_inicial.save()

                item_entrada.movimento_id = mov_inicial
                item_entrada.produto = self.object
                item_entrada.save()

                prod_estocado.produto = self.object
                prod_estocado.save()

            else:
                if (all(formset.is_valid() for formset in formsets)
                        and acomodacao_form.is_valid()
                        and cidade_form.is_valid()):
                    self.object.save()
                    form.save_m2m()

                    acomodacao_form.instance = self.object
                    acom = acomodacao_form.save()

                    cidade_form.instance = self.object
                    cid = cidade_form.save()

                if documento_form.is_valid():
                    documentos = documento_form.save(commit=False)
                    for documento in documentos:
                        documento.save()
                        self.object.documentos.add(documento)

            return self.form_valid(form)

        return self.form_invalid(form)