コード例 #1
0
        /// <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);
            }
        }
コード例 #2
0
        /// <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);
            }
        }
コード例 #3
0
        /// <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,
                    });
                }
            }
        }
コード例 #4
0
        /// <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]);
        }