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