public int GetWorkFlow(BillingReceptionModel item)
        {
            RececaoFaturacaoWorkflow LastWork = DBBillingReceptionWf.GetAll().FirstOrDefault();

            return(LastWork.Id);
        }
        public BillingReceptionModel CreateWorkFlowSend(BillingReceptionModel item, BillingRecWorkflowModel wfItemLast, string postedByUserName)
        {
            //Update Header
            RecFacturasProblemas questao = new RecFacturasProblemas();

            item.Estado = BillingReceptionStates.Pendente;
            RececaoFaturacaoWorkflow LastID = DBBillingReceptionWf.GetAll().LastOrDefault();

            if (wfItemLast.CodProblema != null)
            {
                questao = GetQuestionID(wfItemLast.CodProblema, wfItemLast.CodTipoProblema);

                if (questao.Devolvido == true)
                {
                    item.Estado = BillingReceptionStates.Devolvido;
                }
                else
                {
                    item.Estado = BillingReceptionStates.Pendente;
                    if (item.DataPassaPendente == null || item.DataPassaPendente == "")
                    {
                        item.DataPassaPendente = DateTime.Now.ToString("dd/MM/yyyy");
                    }
                }
            }

            item.DataUltimaInteracao = (item.DataModificacao == null) ? item.DataModificacao.ToString() : item.DataCriacao.ToString();
            item.TipoProblema        = wfItemLast.CodTipoProblema;
            item.AreaPendente        = wfItemLast.AreaWorkflow;
            item.AreaPendente2       = wfItemLast.Area;
            item.Destinatario        = wfItemLast.Destinatario;
            item.Descricao           = wfItemLast.Comentario;
            item.TipoProblema        = wfItemLast.CodTipoProblema;
            item.DescricaoProblema   = wfItemLast.Descricao;
            item.DataModificacao     = DateTime.Now;
            item.ModificadoPor       = postedByUserName;
            item.AreaUltimaInteracao = wfItemLast.AreaWorkflow;
            item.UserUltimaInteracao = wfItemLast.CriadoPor;


            item = repo.Update(item);


            RececaoFaturacaoWorkflow wfItem = new RececaoFaturacaoWorkflow();

            wfItem.IdRecFaturacao = item.Id;
            if (questao.Devolvido == true)
            {
                wfItem.Estado = (int)BillingReceptionStates.Devolvido;
            }
            else
            {
                wfItem.Estado = (int)BillingReceptionStates.Pendente;
            }
            wfItem.Area               = wfItemLast.Area;
            wfItem.AreaWorkflow       = wfItemLast.AreaWorkflow;
            wfItem.ModificadoPor      = item.ModificadoPor;
            wfItem.Data               = item.DataCriacao;
            wfItem.DataCriacao        = DateTime.Now;
            wfItem.CriadoPor          = postedByUserName;
            wfItem.EnderecoEnvio      = postedByUserName;
            wfItem.EnderecoFornecedor = wfItemLast.EnderecoFornecedor;
            wfItem.CodDestino         = wfItemLast.CodDestino;
            wfItem.Destinatario       = wfItemLast.Destinatario;
            wfItem.CodTipoProblema    = wfItemLast.CodTipoProblema;
            wfItem.CodProblema        = wfItemLast.CodProblema;
            wfItem.Descricao          = wfItemLast.Descricao;
            wfItem.Comentario         = wfItemLast.Comentario;
            wfItem.Utilizador         = postedByUserName;
            wfItem.Anexo              = wfItemLast.AttachedIs;

            repo.Create(wfItem);

            if (wfItemLast.Attached != null)
            {
                int id     = 0;
                int Idwork = GetWorkFlow(item);
                item.WorkflowItems.LastOrDefault().Id     = Idwork + 1;
                RececaoFaturacaoWorkflowAnexo wfAnexoItem = new RececaoFaturacaoWorkflowAnexo();
                foreach (BillingRecWorkflowModelAttached attached in wfItemLast.Attached)
                {
                    wfAnexoItem           = DBBillingReceptionWFAttach.ParseToDB(attached);
                    wfAnexoItem.Idwokflow = Idwork + 1;
                    wfAnexoItem.Id        = id;
                    repo.Create(wfAnexoItem);
                }
            }
            try
            {
                repo.SaveChanges();
            }
            catch (Exception ex)
            {
                return(null);
            }

            RecFaturacaoConfigDestinatarios destino = null;

            if (wfItem.CodProblema == "RF1P")
            {
                destino = GetDestinationAreaDest(wfItemLast.CodDestino);
            }
            if (destino != null)
            {
                //Rever o Envio de Areas
                if (destino.EnviaEmail == true && wfItem.EnderecoFornecedor != "")
                {
                    SendEmailBillingReception Email = new SendEmailBillingReception
                    {
                        Subject = "eSUCH - Recepção da Factura : " + item.Id,
                        //From = "*****@*****.**"
                        From = postedByUserName
                    };

                    Email.To.Add(wfItem.EnderecoFornecedor);

                    Email.Body = MakeEmailBodyContent("Solicita-se a validação da fatura enviada em anexo:", item.Id, item.CodFornecedor, item.DataUltimaInteracao, item.Valor.ToString(), postedByUserName);

                    Email.IsBodyHtml = true;

                    Email.SendEmail();
                    try
                    {
                        item.eReasonCode = 1;
                        item.eMessage    = "Resposta enviada com sucesso.";
                    }
                    catch
                    {
                        item.eReasonCode = 2;
                        item.eMessage    = "Não foi possível enviar email ao utilizador que criou o pedido (" + item.Id + ")";
                    }
                }
            }
            return(item);
        }