예제 #1
0
        /// <summary>
        /// Obtém o produto associado com o retalho do plano de corte.
        /// </summary>
        /// <param name="retalho">Retalho de onde será recupera o produto.</param>
        /// <returns>Produto associado com o retalho.</returns>
        private Global.Negocios.Entidades.Produto ObterProduto(Entidades.RetalhoPlanoCorte retalho)
        {
            var codInterno = this.ObterCodInternoProduto(retalho);
            var produto    = this._produtosRetalhos.FirstOrDefault(f => StringComparer.InvariantCultureIgnoreCase.Equals(f.CodInterno, codInterno));

            var produtoJaCarregado = produto != null;

            if (produto == null)
            {
                produto = SourceContext.Instance.CreateQuery()
                          .From <Data.Model.Produto>()
                          .Where("CodInterno=?codInterno AND IdGrupoProd=?idGrupoProd AND IdSubgrupoProd=?idSubgrupoProd")
                          .Add("?codInterno", codInterno)
                          .Add("?idGrupoProd", Data.Model.NomeGrupoProd.Vidro)
                          .Add("?idSubgrupoProd", Data.Helper.Utils.SubgrupoProduto.RetalhosProducao)
                          .ProcessResult <Global.Negocios.Entidades.Produto>()
                          .FirstOrDefault();
            }

            var planoOtimizacao = retalho.GetOwner <Entidades.PlanoOtimizacao>();

            if (produto == null)
            {
                produto = (Global.Negocios.Entidades.Produto)planoOtimizacao.Produto.Clone();
                produto.ProdutoBeneficiamentos.Clear();
                produto.BaixasEstoque.Clear();
                produto.BaixasEstoqueFiscal.Clear();
                produto.Mva.Clear();
                produto.AliquotasIcms.Clear();
                produto.NCMs.Clear();
                produto.FlagArqMesaProduto.Clear();

                produto.ResetAllUids();
                produto.Altura         = (int)retalho.Altura;
                produto.Largura        = (int)retalho.Largura;
                produto.IdGrupoProd    = (int)Data.Model.NomeGrupoProd.Vidro;
                produto.IdSubgrupoProd = (int)Data.Helper.Utils.SubgrupoProduto.RetalhosProducao;
                produto.CodInterno     = codInterno;
                produto.IdProdOrig     = planoOtimizacao.Produto.IdProd;
                produto.Situacao       = Situacao.Ativo;
                produto.Obs            = string.Empty;
                produto.DataCadastro   = DateTime.Now;

                if (Data.Helper.UserInfo.GetUserInfo != null)
                {
                    produto.IdUsuarioCadastro = (int)Data.Helper.UserInfo.GetUserInfo.CodUser;
                }
            }
            else
            {
                produto.Descricao = planoOtimizacao.Produto.Descricao;
            }

            var m2 = (produto.Altura.GetValueOrDefault(0) * produto.Largura.GetValueOrDefault(0)) / 1000000m;

            produto.ValorAtacado = m2 * produto.ValorAtacado;
            produto.ValorBalcao  = m2 * produto.ValorBalcao;
            produto.ValorObra    = m2 * produto.ValorObra;

            if (!produtoJaCarregado)
            {
                this._produtosRetalhos.Add(produto);
            }

            return(produto);
        }
예제 #2
0
        /// <summary>
        /// Obtém o código interno do produto associado com o retalho.
        /// </summary>
        /// <param name="retalho">Retalho base que será usado para recuperar o código interno do produto.</param>
        /// <returns>Código interno do produto associado com o retalho do plano de corte.</returns>
        private string ObterCodInternoProduto(Entidades.RetalhoPlanoCorte retalho)
        {
            var planoOtimizacao = retalho.GetOwner <Entidades.PlanoOtimizacao>();

            return($"{planoOtimizacao.Produto.CodInterno}-{retalho.Altura}X{retalho.Largura}-R");
        }