<commit_before>from pprint import pprint

from django.db import connections

import systextil.models as sys_mod
import systextil.queries as sys_que

import produto.models as pro_mod

from estoque import queries
from estoque import models


def item_str(nivel, ref, tam, cor):
    return f'{nivel}.{ref}.{tam}.{cor}'


class objs_produto():

    def __init__(self, nivel, ref, tam, cor):
        self.nivel = nivel
        self.ref = ref
        self.tam = tam
        self.cor = cor

        self.cursor = connections['so'].cursor()

    def produto(self):
        s_produtos = sys_que.item(
            self.cursor, self.nivel, self.ref, self.tam, self.cor)
        if len(s_produtos) == 0:
            item = item_str(self.nivel, self.ref, self.tam, self.cor)
            raise ValueError(f'Item {item} não encontrado.')
        s_produto = s_produtos[0]

        try:
            produto = pro_mod.Produto.objects.get(referencia=self.ref)
        except pro_mod.Produto.DoesNotExist as e:
            produto = None

        if produto is None:
            produto = pro_mod.Produto(
                referencia=self.ref,
                descricao=s_produto['descr'],
            )
            produto.save()

        return produto


class Transfere():

    def __init__(
            self, cursor, nivel, ref, tam, cor, qtd,
            deposito_origem, deposito_destino):
        self.can_exec = False

        self.cursor = cursor
        self.nivel = nivel
        self.ref = ref
        self.tam = tam
        self.cor = cor
        self.qtd = qtd
        self.deposito_origem = deposito_origem
        self.deposito_destino = deposito_destino

        self.initial_vars()

        self.valid_entries()
        self.valid_configuracao()

        self.calc_vars()
        self.can_exec = True

    def initial_vars(self):
        self.item = f'{self.nivel}.{self.ref}.{self.tam}.{self.cor}'

    def calc_vars(self):
        self.estoque_origem = self.get_estoque(self.deposito_origem)
        self.estoque_destino = self.get_estoque(self.deposito_destino)
        self.novo_estoque_origem = self.estoque_origem - self.qtd
        self.novo_estoque_destino = self.estoque_destino + self.qtd

        produto = queries.get_preco_medio_niv_ref_cor_tam(
            self.cursor, self.nivel, self.ref, self.cor, self.tam)
        try:
            self.preco_medio = produto[0]['preco_medio']
        except Exception:
            raise ValueError(
                f'Não encontrado o preço médio do item {self.item}.')

    def valid_entries(self):
        self.valid_item()
        self.valid_deps()

    def valid_item(self):
        produto = queries.get_preco_medio_niv_ref_cor_tam(
            self.cursor, self.nivel, self.ref, self.cor, self.tam)
        if len(produto) == 0:
            raise ValueError(f'Item {self.item} não encontrado.')

        produto = objs_produto(self.nivel, self.ref, self.tam, self.cor)

        print(produto.produto().descricao)

    def valid_deps(self):
        if self.deposito_origem == self.deposito_destino:
            raise ValueError('Depósitos devem ser diferentes.')

    def get_estoque(self, deposito_field):
        l_estoque = queries.get_estoque_dep_niv_ref_cor_tam(
            self.cursor, deposito_field,
            self.nivel, self.ref, self.cor, self.tam)
        if len(l_estoque) == 0:
            return 0
        else:
            return l_estoque[0]['estoque']
<commit_msg>validação de item feita pelo objs_produto<commit_after>from pprint import pprint

from django.db import connections

import systextil.models as sys_mod
import systextil.queries as sys_que

import produto.models as pro_mod

from estoque import queries
from estoque import models


def item_str(nivel, ref, tam, cor):
    return f'{nivel}.{ref}.{tam}.{cor}'


class objs_produto():

    def __init__(self, nivel, ref, tam, cor):
        self.nivel = nivel
        self.ref = ref
        self.tam = tam
        self.cor = cor

        self.cursor = connections['so'].cursor()

    def produto(self):
        s_produtos = sys_que.item(
            self.cursor, self.nivel, self.ref, self.tam, self.cor)
        if len(s_produtos) == 0:
            item = item_str(self.nivel, self.ref, self.tam, self.cor)
            raise ValueError(f'Item {item} não encontrado.')
        s_produto = s_produtos[0]

        try:
            produto = pro_mod.Produto.objects.get(referencia=self.ref)
        except pro_mod.Produto.DoesNotExist as e:
            produto = None

        if produto is None:
            produto = pro_mod.Produto(
                referencia=self.ref,
                descricao=s_produto['descr'],
            )
            produto.save()

        return produto


class Transfere():

    def __init__(
            self, cursor, nivel, ref, tam, cor, qtd,
            deposito_origem, deposito_destino):
        self.can_exec = False

        self.cursor = cursor
        self.nivel = nivel
        self.ref = ref
        self.tam = tam
        self.cor = cor
        self.qtd = qtd
        self.deposito_origem = deposito_origem
        self.deposito_destino = deposito_destino

        self.initial_vars()

        self.valid_entries()
        self.valid_configuracao()

        self.calc_vars()
        self.can_exec = True

    def initial_vars(self):
        self.item = f'{self.nivel}.{self.ref}.{self.tam}.{self.cor}'

    def calc_vars(self):
        self.estoque_origem = self.get_estoque(self.deposito_origem)
        self.estoque_destino = self.get_estoque(self.deposito_destino)
        self.novo_estoque_origem = self.estoque_origem - self.qtd
        self.novo_estoque_destino = self.estoque_destino + self.qtd

        produto = queries.get_preco_medio_niv_ref_cor_tam(
            self.cursor, self.nivel, self.ref, self.cor, self.tam)
        try:
            self.preco_medio = produto[0]['preco_medio']
        except Exception:
            raise ValueError(
                f'Não encontrado o preço médio do item {self.item}.')

    def valid_entries(self):
        self.valid_item()
        self.valid_deps()

    def valid_item(self):
        objs_prod = objs_produto(self.nivel, self.ref, self.tam, self.cor)

        self.produto = objs_prod.produto()

    def valid_deps(self):
        if self.deposito_origem == self.deposito_destino:
            raise ValueError('Depósitos devem ser diferentes.')

    def get_estoque(self, deposito_field):
        l_estoque = queries.get_estoque_dep_niv_ref_cor_tam(
            self.cursor, deposito_field,
            self.nivel, self.ref, self.cor, self.tam)
        if len(l_estoque) == 0:
            return 0
        else:
            return l_estoque[0]['estoque']

{'fraction_non_alphanumeric': 0.09914759982054733, 'fraction_numerical': 0.0019440705847166143, 'mean_word_length': 2.1877979027645376, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1763312', 'n_tokens_mistral': 2291, 'n_tokens_neox': 2240, 'n_words': 447}