/// <summary> /// Preenche os dados da peças do plano de corte. /// </summary> /// <param name="planoCorte">Plano de corte que será preenchido.</param> /// <param name="etiquetaPlanoCorte">Etiqueta o plano de corte que será usado como referência.</param> private void PreencherPecasPlanoCorte(Entidades.PlanoCorte planoCorte, eCutter.EtiquetaPlanoCorte etiquetaPlanoCorte) { var processadas = new List <Entidades.PecaPlanoCorte>(); // os números das etiquetas do produto pedido pe var numerosEtiqueta = etiquetaPlanoCorte.Etiquetas.OfType <eCutter.EtiquetaPeca>() .Select(f => f.Notas?.Trim()) .Where(f => !string.IsNullOrWhiteSpace(f) && f.Contains(".") && f.Contains("/") && f.Contains("-")) .Distinct(); var index = 0; var parametros = numerosEtiqueta .Select(f => new Colosoft.Query.QueryParameter($"?p{index++}", f)) .ToList(); var etiquetasProdutoPedidoProducao = SourceContext.Instance.CreateQuery() .From <Data.Model.ProdutoPedidoProducao>() .Where($"NumEtiqueta IN ({string.Join(",", parametros.Select(f => f.Name))})") .Add(parametros) .Select("NumEtiqueta, IdProdPedProducao") .Execute() .Select(f => new { Etiqueta = f.GetString(0), IdProdPedProducao = f.GetInt32(1), }) .ToList(); foreach (var etiqueta in etiquetaPlanoCorte.Etiquetas.OfType <eCutter.EtiquetaPeca>()) { var produtoPedidoProducao = etiquetasProdutoPedidoProducao.FirstOrDefault(f => f.Etiqueta == etiqueta.Notas?.Trim()); if (produtoPedidoProducao == null) { continue; } var peca = planoCorte.Pecas.FirstOrDefault(f => f.IdProdPedProducao == produtoPedidoProducao.IdProdPedProducao); if (peca == null) { peca = SourceContext.Instance.Create <Entidades.PecaPlanoCorte>(); peca.IdProdPedProducao = produtoPedidoProducao.IdProdPedProducao; planoCorte.Pecas.Add(peca); } peca.Rotacionada = etiqueta.Rotacionada; peca.PosicaoGeral = etiqueta.PosicaoPeca; peca.Posicao = etiqueta.Posicao; peca.Forma = etiqueta.Forma; processadas.Add(peca); } var apagadas = planoCorte.Pecas.Where(f => !processadas.Contains(f)).ToArray(); foreach (var peca in apagadas) { planoCorte.Pecas.Remove(peca); } }
/// <summary> /// Preenche os dados dos retalhos do plano de corte. /// </summary> /// <param name="planoCorte">Plano de corte que será preenchido.</param> /// <param name="etiquetaPlanoCorte">Etiqueta do plano de corte.</param> private void PreencherRetalhosPlanoCorte(Entidades.PlanoCorte planoCorte, eCutter.EtiquetaPlanoCorte etiquetaPlanoCorte) { var processados = new List <Entidades.RetalhoPlanoCorte>(); foreach (var etiqueta in etiquetaPlanoCorte.Etiquetas.OfType <eCutter.EtiquetaRetalho>().Where(f => f.Reaproveitavel)) { var retalho = planoCorte.Retalhos.FirstOrDefault(f => f.Posicao == etiqueta.Posicao); if (retalho == null) { retalho = SourceContext.Instance.Create <Entidades.RetalhoPlanoCorte>(); retalho.Posicao = etiqueta.Posicao; planoCorte.Retalhos.Add(retalho); } retalho.Posicao = etiqueta.Posicao; retalho.Largura = etiqueta.Largura; retalho.Altura = etiqueta.Altura; retalho.Reaproveitavel = etiqueta.Reaproveitavel; if (this.CriarRetalhosProducao) { var produto = this.ObterProduto(retalho); var retalhoProducao = new Data.Model.RetalhoProducao { IdRetalhoProducao = retalho.TypeManager.GenerateInstanceUid(typeof(Data.Model.RetalhoProducao)), DataCad = DateTime.Now, IdProd = produto.IdProd, Situacao = Data.Model.SituacaoRetalhoProducao.Indisponivel, UsuCad = Data.Helper.UserInfo.GetUserInfo?.CodUser ?? 0, }; this._retalhosProducao.Add(retalhoProducao); retalho.IdRetalhoProducao = retalhoProducao.IdRetalhoProducao; } processados.Add(retalho); } var apagados = planoCorte.Retalhos.Where(f => !processados.Contains(f)).ToArray(); foreach (var retalho in apagados) { planoCorte.Retalhos.Remove(retalho); } }
/// <summary> /// Obtém os produtos de impressão associados do o plano de corte. /// </summary> /// <param name="planoCorte"></param> /// <returns></returns> public IEnumerable <Data.Model.ProdutoImpressao> ObterProdutosImpressao(Entidades.PlanoCorte planoCorte) { var produtosPedidoProducao = ObterProdutosPedidoProducao(planoCorte); CarregarProdutosImpressao(produtosPedidoProducao); var sequencia = -1; foreach (var item in planoCorte.Itens) { sequencia++; var peca = item as PecaPlanoCorte; if (peca != null && peca.IdProdPedProducao.HasValue) { yield return(ObterProdutoImpressao(peca, produtosPedidoProducao, sequencia)); continue; } var retalho = item as RetalhoPlanoCorte; if (retalho != null && retalho.IdRetalhoProducao.HasValue) { string etiqueta = "R" + retalho.IdRetalhoProducao + "-1/1"; yield return(new Data.Model.ProdutoImpressao { IdProdImpressao = TypeManager.GenerateInstanceUid(typeof(Data.Model.ProdutoImpressao)), IdRetalhoProducao = retalho.IdRetalhoProducao, PosicaoProd = 1, ItemEtiqueta = 1, QtdeProd = 1, PosicaoArqOtimiz = retalho.Posicao, PlanoCorte = planoCorte.NumeroEtiqueta, NumEtiqueta = etiqueta, }); } } }
/// <summary> /// Obtém os produtos de pedido de produto associados com o plano de corte. /// </summary> /// <param name="planoCorte"></param> /// <returns></returns> private IEnumerable <ProdutoPedidoProducaoEtiqueta> ObterProdutosPedidoProducao(Entidades.PlanoCorte planoCorte) { var idsProdPedProducao = planoCorte.Pecas.Select(f => f.IdProdPedProducao).Distinct(); var ids = string.Join(",", idsProdPedProducao); if (!string.IsNullOrEmpty(ids)) { return(SourceContext.Instance.CreateQuery() .From <Data.Model.ProdutoPedidoProducao>("ppp") .LeftJoin <Data.Model.ProdutosPedido>("ppp.IdProdPed=pp.IdProdPedEsp", "pp") .Where($"ppp.IdProdPedProducao IN ({ids})") .Select("ppp.IdProdPedProducao, ppp.NumEtiqueta, pp.IdProdPed") .Execute() .Select(f => new ProdutoPedidoProducaoEtiqueta(f["IdProdPedProducao"], f["NumEtiqueta"], f["IdProdPed"])) .ToArray()); } return(new ProdutoPedidoProducaoEtiqueta[0]); }