Example #1
0
        private static Boolean AreContractsActive(DataConnector connector, MailingDTO mailing)
        {
            Boolean active;

            ContractDAO contractDAO = new ContractDAO(connector.MySqlConnection);
            ContractItemDAO contractItemDAO = new ContractItemDAO(connector.MySqlConnection);

            // Faturamento de um contrato apenas
            if (mailing.codigoContrato != 0)
            {
                ContractDTO contract = contractDAO.GetContract(mailing.codigoContrato);
                active = (contract.status != 3) && (contract.status != 4);
                return active;
            }

            // Caso contrário é o faturamento de todos os equipamentos do cliente (um ou mais contratos)
            active = false;
            List<ContractItemDTO> itemList = contractItemDAO.GetItems("businessPartnerCode = '" + mailing.businessPartnerCode + "'");
            foreach (ContractItemDTO item in itemList)
            {
                ContractDTO contract = contractDAO.GetContract(item.contrato_id);
                if ((contract.status != 3) && (contract.status != 4)) active = true;
            }
            return active;
        }
Example #2
0
        private static void ProcessMailingList()
        {
            DataConnector dataConnector = new DataConnector();
            dataConnector.OpenConnection();

            primaryServer = dataConnector.GetServer("Primary");
            secondaryServer = dataConnector.GetServer("Secondary");

            // Busca o servidor de envio que trabalha na porta 587 ( porta que o NET Smtp Client aceita )
            SmtpServerDAO smtpServerDAO = new SmtpServerDAO(dataConnector.MySqlConnection);
            List<SmtpServerDTO> serverList = smtpServerDAO.GetServers("porta=587");
            SmtpServerDTO smtpServer = null;
            if (serverList.Count == 1) smtpServer = serverList[0];

            String listaEnvio = "";
            MailingDAO mailingDAO = new MailingDAO(dataConnector.MySqlConnection);
            List<MailingDTO> mailingList = mailingDAO.GetMailings(null);
            foreach (MailingDTO mailing in mailingList)
            {
                // Verifica se hoje é o dia do faturamento
                Boolean isBillingTime = false;
                int diaFaturamento = mailing.diaFaturamento;
                if (diaFaturamento < 1) diaFaturamento = 1; // Consiste o dia para casos onde o usuário entrou um número negativo ou zero
                int daysInMonth = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month);
                if (diaFaturamento > daysInMonth) diaFaturamento = daysInMonth; // Consiste o dia para casos onde exceda a quantidade de dias do mês
                isBillingTime = (diaFaturamento == DateTime.Now.Day);

                // Verifica se já foi enviado hoje
                Boolean alreadySent = mailing.ultimoEnvio.Date == DateTime.Now.Date;

                if ((isBillingTime) && (!alreadySent) && (smtpServer != null))
                {
                    Boolean active = AreContractsActive(dataConnector, mailing);
                    if (active)
                    {
                        SendMailing(dataConnector, mailing, smtpServer);
                        listaEnvio += " Cliente: " + mailing.businessPartnerCode + " - " + mailing.businessPartnerName + " Enviado para: " + mailing.destinatarios + Environment.NewLine;
                    }
                }
            }
            if (String.IsNullOrEmpty(listaEnvio)) listaEnvio = "Vazia";
            if (EventLog.SourceExists("Billing Mailer"))
                EventLog.WriteEntry("Billing Mailer", "Lista de envio -> " + Environment.NewLine + listaEnvio);

            dataConnector.CloseConnection();
        }
Example #3
0
        private static void SendMailing(DataConnector connector, MailingDTO mailing, SmtpServerDTO server)
        {
            MailMessage mailMessage = null;
            if (mailing.codigoContrato == 0)
                mailMessage = MountBusinessPartnerBilling(connector, mailing.businessPartnerCode, mailing.enviarDemonstrativo);
            else
                mailMessage = MountContractBilling(connector, mailing.codigoContrato, mailing.codigoSubContrato, mailing.enviarDemonstrativo);

            List<String> reportFiles = null;
            if (mailing.enviarDemonstrativo && mailMessage.Attachments.Count > 0) {
                reportFiles = new List<String>();
                foreach (Attachment mailAttachment in mailMessage.Attachments)
                    reportFiles.Add(mailAttachment.Name);
            }

            // TODO:  Consertar o envio através do .NET,  utilizar algum componente que funcione, o SmtpClient
            //        da Microsoft não suporta SSL implicito
            SmtpServer smtpServer = SmtpServer.ImportFromDTO(server);
            MailSender mailSender = new MailSender(smtpServer, new TraceHandler());
            mailSender.SetContents(mailMessage.Body, reportFiles);
            Boolean success = mailSender.SendMail("Faturamento de contrato", server.usuario, mailing.destinatarios);

            if (!success)
            {
                // caso não tenha tido sucesso ao enviar através do SmtpClient do .NET tenta enviar pelo PHP
                String mailerUrl = "http://" + primaryServer + "/Contratos/AjaxCalls/SendEmail.php";
                String mailerParams = "subject=Faturamento%20de%20contrato&mailBody=" + mailMessage.Body + "&recipients=" + mailing.destinatarios;
                String aditionalParams = "&fileCount=0";
                if (reportFiles != null)
                {
                    aditionalParams = "&fileCount=" + reportFiles.Count;
                    int fileIndex = 0;
                    foreach (String filename in reportFiles)
                    {
                        aditionalParams += "&filename" + fileIndex + "=" + reportFiles[fileIndex];
                        aditionalParams += "&path" + fileIndex + "=" + Environment.CurrentDirectory + @"\" + reportFiles[fileIndex];
                        fileIndex++;
                    }
                }

                RequestHandler mailerRequest = new RequestHandler(mailerUrl, new TraceHandler());
                mailerRequest.StartRequest(mailerParams + aditionalParams, null);
                String mailerResponse = (String)mailerRequest.ParseResponse(typeof(System.String));

                if (mailerResponse == "Email enviado com sucesso!") success = true;
                if (!success) EventLog.WriteEntry("Billing Mailer", mailerResponse);
            }

            if (success) // e-mail enviado com sucesso, grava no banco de dados a data
            {
                MailingDAO mailingDAO = new MailingDAO(connector.MySqlConnection);
                mailing.ultimoEnvio = DateTime.Now;
                mailingDAO.SetMailing(mailing);
            }
        }
Example #4
0
        private static String ObterParcelaContrato(DataConnector connector, ContractDTO contract)
        {
            // Grava a parcela atual, adiciona uma parcela pois está iniciando um novo faturamento
            ContractDAO contractDAO = new ContractDAO(connector.MySqlConnection);
            int increase = 0;
            if ((contract.mesReferencia != DateTime.Now.Month)) {
                increase = 1;
                contractDAO.SetContractParcell(contract.id, contract.parcelaAtual + increase);
                contractDAO.SetContractMonthYear(contract.id, DateTime.Now.Month, DateTime.Now.Year);
            }

            return (contract.parcelaAtual + increase) + "/" + contract.quantidadeParcelas;
        }
Example #5
0
        // Busca o nome do vendedor no SQL Server
        private static String ObterNomeVendedor(DataConnector connector, ContractDTO contract)
        {
            SalesPersonDAO salesPersonDAO = new SalesPersonDAO(connector.SqlServerConnection);
            String nomeVendedor = salesPersonDAO.GetSalespersonName(contract.vendedor);

            return nomeVendedor;
        }
Example #6
0
        // Busca o nome do parceiro de negócios no SQL Server
        private static String ObterNomeCliente(DataConnector connector, String cardCode)
        {
            BusinessPartnerDAO businessPartnerDAO = new BusinessPartnerDAO(connector.SqlServerConnection);
            BusinessPartnerDTO businessPartner = businessPartnerDAO.GetBusinessPartner(cardCode);
            String informacaoAdicional = "";
            if (businessPartner.CardName != businessPartner.CardFName) informacaoAdicional = " (" + businessPartner.CardFName + ")";
            String cliente = businessPartner.CardName + informacaoAdicional;

            return cliente;
        }
Example #7
0
        private static MailMessage MountContractBilling(DataConnector connector, int contractId, int subContractId, Boolean enviarDemonstrativo)
        {
            ContractDAO contractDAO = new ContractDAO(connector.MySqlConnection);
            SubContractDAO subContractDAO = new SubContractDAO(connector.MySqlConnection);
            ContractItemDAO contractItemDAO = new ContractItemDAO(connector.MySqlConnection);
            EquipmentDAO equipmentDAO = new EquipmentDAO(connector.SqlServerConnection);

            ContractDTO contract = contractDAO.GetContract(contractId);
            String contractItems = "";
            List<SubContractDTO> subContractList = subContractDAO.GetSubContracts("contrato_id=" + contract.id);
            foreach (SubContractDTO subContract in subContractList)
            {
                List<ContractItemDTO> itemList = contractItemDAO.GetItems("subcontrato_id = " + subContract.id);
                String equipmentEnumeration = "";
                foreach (ContractItemDTO contractItem in itemList)
                {
                    if (!String.IsNullOrEmpty(equipmentEnumeration)) equipmentEnumeration += ", ";
                    equipmentEnumeration += contractItem.codigoCartaoEquipamento;
                }
                List<EquipmentDTO> equipamentList = equipmentDAO.GetEquipments(equipmentEnumeration);
                String serialNumbers = "";
                foreach (EquipmentDTO equipment in equipamentList)
                {
                    if (!String.IsNullOrEmpty(serialNumbers)) serialNumbers += ", ";
                    serialNumbers += equipment.ManufSN;
                }
                if (String.IsNullOrEmpty(serialNumbers)) serialNumbers = "Nenhum item encontrado";
                contractItems += subContract.siglaTipo + " - " + serialNumbers + "<br/>";
            }

            String cliente = ObterNomeCliente(connector, contract.pn);
            String parcela = ObterParcelaContrato(connector, contract);
            String vendedor = ObterNomeVendedor(connector, contract);
            DateTime dataVencimento = MountDate(contract.diaVencimento, contract.referencialVencimento);
            String billingInfo = "Contrato: " + contract.numero + "<br/>" + "Itens: " + contractItems + "<br/>" + "Cliente: " + cliente + "<br/>" + "Parcela: " + parcela + "<br/>" + "Vendedor: " + vendedor + "<br/>" + "Data Vencimento: " + dataVencimento.ToString("dd/MM/yyyy") + "<br/>";

            List<String> reportFiles = new List<String>();
            if (enviarDemonstrativo) reportFiles = BuildReportFiles("faturamentoContrato.php", "contractId=" + contractId + "&subContractId=" + subContractId);

            MailMessage mailMessage = new MailMessage();
            mailMessage.Subject = "Faturamento de contrato";
            mailMessage.Body = "Email gerado automaticamente, não responder." + "<br/><br/>" + billingInfo;
            foreach (String filename in reportFiles)
                mailMessage.Attachments.Add(new Attachment(filename));

            return mailMessage;
        }
Example #8
0
        private static MailMessage MountBusinessPartnerBilling(DataConnector connector, String businessPartnerCode, Boolean enviarDemonstrativo)
        {
            ContractDAO contractDAO = new ContractDAO(connector.MySqlConnection);
            SubContractDAO subContractDAO = new SubContractDAO(connector.MySqlConnection);
            ContractItemDAO contractItemDAO = new ContractItemDAO(connector.MySqlConnection);
            EquipmentDAO equipmentDAO = new EquipmentDAO(connector.SqlServerConnection);

            List<ContractItemDTO> itemList = contractItemDAO.GetItems("businessPartnerCode = '" + businessPartnerCode + "'");
            Dictionary<int, List<ContractItemDTO>> itemGroups = new Dictionary<int, List<ContractItemDTO>>();
            foreach (ContractItemDTO item in itemList)
            {
                // Cria um novo grupo caso não encontre um grupo para este subcontrato
                if (!itemGroups.ContainsKey(item.subContrato_id))
                    itemGroups.Add(item.subContrato_id, new List<ContractItemDTO>());

                // Adiciona o item ao grupo do subcontrato
                List<ContractItemDTO> group = itemGroups[item.subContrato_id];
                group.Add(item);
            }

            String billingInfo = "Cliente: " + ObterNomeCliente(connector, businessPartnerCode) + "<br/><br/>";
            foreach (int subContractId in itemGroups.Keys)
            {
                List<ContractItemDTO> group = itemGroups[subContractId];
                String itemEnumeration = "";
                foreach (ContractItemDTO contractItem in group)
                {
                    if (!String.IsNullOrEmpty(itemEnumeration)) itemEnumeration += ", ";
                    itemEnumeration += contractItem.codigoCartaoEquipamento;
                }
                List<EquipmentDTO> equipamentList = equipmentDAO.GetEquipments(itemEnumeration);
                String equipmentEnumeration = "";
                foreach (EquipmentDTO equipment in equipamentList)
                {
                    if (!String.IsNullOrEmpty(equipmentEnumeration)) equipmentEnumeration += ", ";
                    equipmentEnumeration += equipment.ManufSN;
                }
                SubContractDTO subContract = subContractDAO.GetSubContract(subContractId);
                ContractDTO contract = contractDAO.GetContract(subContract.contrato_id);
                Boolean activeContract = true;
                if ((contract.status == 3) || (contract.status == 4)) activeContract = false;
                if (activeContract) // Não fatura caso o status do contrato seja finalizado ou cancelado
                {
                    String parcela = ObterParcelaContrato(connector, contract);
                    String vendedor = ObterNomeVendedor(connector, contract);
                    DateTime dataVencimento = MountDate(contract.diaVencimento, contract.referencialVencimento);
                    String contractInfo = "Contrato: " + contract.numero + "<br/>" + "Parcela: " + parcela + "<br/>" + "Vendedor: " + vendedor + "<br/>" + "Data Vencimento: " + dataVencimento.ToString("dd/MM/yyyy") + "<br/>";
                    String subContractInfo = subContract.siglaTipo + " - " + equipmentEnumeration + "<br/>";
                    billingInfo += contractInfo + subContractInfo + "<br/>";
                }
            }

            List<String> reportFiles = new List<String>();
            if (enviarDemonstrativo) reportFiles = BuildReportFiles("faturamentoCliente.php", "businessPartnerCode=" + businessPartnerCode);

            MailMessage mailMessage = new MailMessage();
            mailMessage.Subject = "Faturamento de contrato";
            mailMessage.Body = "Email gerado automaticamente, não responder." + "<br/><br/>" + billingInfo;
            foreach(String filename in reportFiles)
                mailMessage.Attachments.Add(new Attachment(filename));

            return mailMessage;
        }