/// <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); }
/// <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"); }