Example #1
0
        /// <summary>
        /// Schreibt den aktuellen Rechnungslaufstatus in die Datenbank
        /// </summary>
        /// <param name="currIndex">Auftragsindex</param>
        /// <param name="pil">RechnungslaufDatensatz</param>
        private void WritePilotStatus( int currIndex, InvoiceRunReport pil)
        {
            int lastIndexState = 0;
            try
            {
                var invoiceRunReport = dbContext.InvoiceRunReport.FirstOrDefault(q => q.Id == pil.Id);
                if (lastIndexState < 100)
                {
                    double myValue = elementsToDoCount;
                    lastIndexState =  Convert.ToInt32(100/myValue  * currIndex);

                    if (invoiceRunReport != null)
                    {
                        invoiceRunReport.InvoiceRunProgress = lastIndexState;

                    }
                }
                else
                {
                    lastIndexState = 100;
                    invoiceRunReport.InvoiceRunProgress = lastIndexState;
                    invoiceRunReport.FinishedDate = DateTime.Now;

                }
                dbContext.SubmitChanges();
            }
            catch (Exception ex)
            {
                log.Error("Fehler beim Rechnungslauf in WritePilotStatus: " + ex.Message);
                dbContext.WriteLogItem("Fehler beim Rechnungslauf in WritePilotStatus: " + ex.Message, LogTypes.ERROR);
            }
        }
Example #2
0
        /// <summary>
        /// Erstellt einen neuen Rechnungslauf Datensatz
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void GenerateInvoiceRunButton_Click(object sender, EventArgs e)
        {
            InvoiceRunError.Text = "";
            using (DataClasses1DataContext dbContext = new DataClasses1DataContext())
            {
                try
                {
                    int? customerId = null;
                    int? invoiceType = null;

                    if (CustomerDropDownList.SelectedValue != string.Empty)
                        customerId = Int32.Parse(CustomerDropDownList.SelectedValue);

                    if (RechnungsTypComboBox.SelectedValue != string.Empty && RechnungsTypComboBox.Enabled == true)
                        invoiceType = Int32.Parse(RechnungsTypComboBox.SelectedValue);

                    InvoiceRunReport run = new InvoiceRunReport()
                    {
                        CustomerId = customerId,
                        InvoiceTypeId = invoiceType,
                        CreateDate = DateTime.Now
                    };
                    dbContext.InvoiceRunReport.InsertOnSubmit(run);
                    dbContext.SubmitChanges();
                    RadGridInvoiceRun.MasterTableView.ClearChildEditItems();
                    RadGridInvoiceRun.MasterTableView.ClearEditItems();
                    RadGridInvoiceRun.Rebind();
                }
                catch (Exception ex)
                {
                    InvoiceRunError.Visible = true;
                    InvoiceRunError.Text = "Rechnungslauf Fehler " + ex.Message;
                    dbContext.WriteLogItem("Rechnungslauf Error " + ex.Message, LogTypes.ERROR, "Rechnungslauf");
                }
            }
        }
Example #3
0
        /// <summary>
        /// Gibt alle fuer den Rechnungslauf relevanten Auftraege zurueck
        /// </summary>
        /// <param name="currentReport"></param>
        /// <returns></returns>
        private IQueryable<VirtualOrder> getOrders(InvoiceRunReport currentReport)
        {
            IQueryable<VirtualOrder> v_orders = null;
            try
            {
                log.Info("Lese aufträge für den Rechnungslauf:" + currentReport.Id);
                v_orders = from cust in dbContext.Customer
                           join ord in dbContext.Order on cust.Id equals ord.CustomerId
                           join lrcust in dbContext.LargeCustomer on cust.Id equals lrcust.CustomerId
                           where (ord.Status == 600 || ord.Status == 700)
                           orderby ord.Ordernumber descending
                           select new VirtualOrder
                            {

                                OrderId = ord.Id,
                                Location = ord.Location.Name,
                                OrderNumber = ord.Ordernumber,
                                ExecutionDate = ord.ExecutionDate,
                                OrderLocation = ord.LocationId,
                                OrderDate = ord.ExecutionDate,
                                CustomerId = cust.Id,
                                IvoiceTypeId = lrcust.InvoiceTypesID,
                                LocationName = ord.Location.Name,
                                LocationId = ord.LocationId,
                                ReportId = currentReport.Id

                            };

                if (currentReport.CustomerId != null)
                {
                   v_orders= v_orders.Where(q => q.CustomerId == currentReport.CustomerId);
                }
                if (currentReport.InvoiceTypeId != null)
                {
                  v_orders=  v_orders.Where(q => q.IvoiceTypeId == currentReport.InvoiceTypeId);
                }
                log.Info("Auslesen erfolgreich:" + currentReport.Id);
            }
            catch (Exception ex)
            {
                v_orders = null;
                log.AddcompanyMessages("Fehler beim Rechnungslauf, bitte kontaktieren Sie den Administrator, dieser hat eine Einsicht in die Detaillogs");
                log.Error("Fehler beim Rechnungslauf in getOrders: " + ex.Message);
                dbContext.WriteLogItem("Fehler beim Rechnungslauf in getOrders: " + ex.Message, LogTypes.ERROR);
            }
            return v_orders;
        }
Example #4
0
        /// <summary>
        /// Rechnungen drucken
        /// </summary>
        /// <param name="rep"></param>
        private void PrintInvoices(InvoiceRunReport rep)
        {
            try
            {
                TransactionScope ts=null;
                List<_Accounts> acc = null;
                invoices.AddRange(getInvoices(rep).ToList());
                log.Info("Erstelle Rechnungen für den Rechnungslauf:" + rep.Id);
                log.AddcompanyMessages("Abgeschlossene Aufträge werden nun verrechnet, insgesamt: " + invoices.Count);
                foreach (var inv in invoices)
                {
                    WritePilotStatus(currOrderIndex, rep);
                    currOrderIndex++;
                    log.Info("Erstelle Buchungskosten für die Rechnung mit der ID:" + inv.Id);
                    try
                    {
                        if (inv.InvoiceItem.Count <= 0)
                        {
                            throw new Exception("Die Rechnung konnte nicht gebucht werden, da für diese Rechnung keine Rechnungspositionen verbucht wurden. Rechnungsid: " + inv.Id);
                        }
                        acc = Accounts.generateAccountNumber(dbContext, inv.Id).ToList();
                        using (ts = new TransactionScope())
                        {

                            if (acc != null && acc.Count() == inv.InvoiceItem.Count)
                            {
                                foreach (var thisItems in acc)
                                {
                                    var myAccount = new InvoiceItemAccountItem
                                    {
                                        IIACCID = Guid.NewGuid(),
                                        InvoiceItemId = thisItems.InvoiceItemId,
                                        RevenueAccountText = thisItems.AccountNumber
                                    };
                                    log.AddcompanyMessages("Erlöskonto mit der Nummer:" + myAccount.RevenueAccountText + " wird in die Rechnung übernommen");

                                    log.Info("Erstellt Erlöskonto mit der ID:" + myAccount.IIACCID);
                                    var contains = dbContext.InvoiceItemAccountItem.FirstOrDefault(q => q.InvoiceItemId ==
                                        thisItems.InvoiceItemId && q.RevenueAccountText == thisItems.AccountNumber.Trim());
                                    if (contains != null)
                                    {
                                        log.Error("Fehler, für diese Rechnungspostion mit der id:" + thisItems.InvoiceItemId +
                                            " wurde bereits ein Erlöskonto angelegt! Die Rechnung mit der ID:" + inv.Id + " kann nicht erstellt werden.");
                                        contains.RevenueAccountText = thisItems.AccountNumber.Trim();
                                    }
                                    else
                                    {
                                        dbContext.InvoiceItemAccountItem.InsertOnSubmit(myAccount);
                                    }
                                    dbContext.SubmitChanges();

                                }

                                using (MemoryStream memS = new MemoryStream())
                                {
                                    inv.LogDBContext = dbContext;
                                    inv.Print(dbContext, memS, "");
                                    dbContext.SubmitChanges();

                                }

                                Guid? locationId = null;
                                locationId = (from inv_ in dbContext.Invoice
                                              join oi in dbContext.OrderInvoice on inv_.Id equals oi.InvoiceId
                                              join myorder in dbContext.Order on oi.OrderId equals myorder.Id
                                              where inv_.Id == inv.Id
                                              select myorder).First().LocationId;
                                        //inv.OrderInvoice.First().Order.LocationId;
                                if (inv.Customer.LargeCustomer.SendInvoiceByEmail)
                                {
                                    var emails = inv.Customer.LargeCustomer.GetMailinglistAdresses(dbContext, locationId, "Rechnung");
                                    foreach (var mails in emails)
                                    {
                                        log.AddcompanyMessages("Rechnung: " + inv.InvoiceNumber.Number +
                                            " wird per Email an: " + mails + " versendet");
                                    }
                                    Invoice.SendByMail(dbContext, inv.Id, ConfigurationManager.AppSettings["smtpHost"],
                                     ConfigurationManager.AppSettings["FromEmail"], emails);
                                }
                                else
                                {
                                    log.AddcompanyMessages("Rechnung: " + inv.InvoiceNumber.Number +
                                         " wurde erstellt und ist im CASE System zu finden, da der Kunde:"+inv.Customer.CustomerNumber+" kein Mailversand als Rechnungsversand definiert hat.");

                                }
                                ts.Complete();
                                log.Info("Rechnung: " + inv.InvoiceNumber.Number + " wurde gedruckt und abgeschlossen.");
                                log.AddcompanyMessages("Rechnung: " + inv.InvoiceNumber.Number + " wurde gedruckt und abgeschlossen.");

                            }
                            else
                            {
                                throw new Exception("Die Rechnung enthält keine Erlöskontent. Rechnungsid: " + inv.Id);
                            }

                        }
                    }
                    catch (Exception ex)
                    {
                        if(ts!=null)
                        ts.Dispose();
                        log.Error("Fehler beim Rechnungslauf in PrintInvoices:"+ex.Message);
                        log.AddcompanyMessages("Fehler beim Rechnungslauf:" + ex.Message);
                        log.AddcompanyMessages("Bitte korrigieren Sie wenn möglich den Fehler und starten einen neuen Rechnungslauf, da die Änderungen verworfen wurden.");

                        dbContext.WriteLogItem("Fehler beim Rechnungslauf in PrintInvoices:"+ex.Message, LogTypes.ERROR);
                        continue;
                    }

                }

                var invoiceRunReport = dbContext.InvoiceRunReport.FirstOrDefault(q => q.Id == rep.Id);
                invoiceRunReport.LogDBContext = dbContext;
                invoiceRunReport.InvoiceRunProgress = 100;
                invoiceRunReport.FinishedDate = DateTime.Now;
                dbContext.SubmitChanges();
                log.AddcompanyMessages("Rechnungslauf abgeschlossen");
            }
            catch (Exception ex)
            {
                log.AddcompanyMessages("Fehler beim Rechnungslauf/Rechnungsdruck, bitte kontaktieren Sie den Administrator, dieser hat die Einsicht in die Detaillogs.");
                log.Error("Fehler beim Rechnungslauf in PrintInvoices: " + ex.Message);
                dbContext.WriteLogItem("Fehler beim Rechnungslauf in PrintInvoices: " + ex.Message, LogTypes.ERROR);
            }
        }
Example #5
0
        /// <summary>
        /// Gibt alle Rechnungen zurueck, die zum Fertigstellen sind
        /// </summary>
        /// <param name="currentReport"></param>
        /// <returns></returns>
        private List<Invoice> getInvoices(InvoiceRunReport currentReport)
        {
            List<Invoice> v_invoices = null;
            try
            {
                log.Info("Zähle Rechnungen  für den Rechnungslauf:" + currentReport.Id);
                v_invoices = (from inv in dbContext.Invoice
                                  where (inv.canceled == null || inv.canceled == false)
                                  && inv.IsPrinted == false
                                  && !invoices.Contains(inv)
                                  orderby inv.CreateDate descending
                                  select inv).ToList();

                if (currentReport.CustomerId != null)
                {
                    v_invoices = v_invoices.Where(q => q.CustomerId == currentReport.CustomerId).ToList();
                }
                if (currentReport.InvoiceTypeId != null)
                {
                    v_invoices = v_invoices.Where(q => q.Customer.LargeCustomer.InvoiceTypesID == currentReport.InvoiceTypeId).ToList();
                }

                log.Info("Abzählen getInvoices erfolgreich:" + currentReport.Id);
            }
            catch (Exception ex)
            {
                v_invoices = null;
                log.Error("Fehler beim Rechnungslauf in getOrders: " + ex.Message);
                dbContext.WriteLogItem("Fehler beim Rechnungslauf in getOrders: " + ex.Message, LogTypes.ERROR);
            }
            return v_invoices;
        }
Example #6
0
        /// <summary>
        /// Addiert Rechnungen und Auftraege zusammen damit bekannt ist, wie viele Postiionen zu erledigen sind
        /// </summary>
        /// <param name="currentReport"></param>
        /// <param name="orders"></param>
        /// <returns></returns>
        private int elementsToDo(InvoiceRunReport currentReport, IQueryable<VirtualOrder> orders)
        {
            try
            {
                var invoices = getInvoices(currentReport).ToList();
                return invoices.Count + orders.ToList().Count();
            }
            catch (Exception ex)
            {
                log.Error("Fehler beim Rechnungslauf in elementsToDo: " + ex.Message);
                dbContext.WriteLogItem("Fehler beim Rechnungslauf in elementsToDo: " + ex.Message, LogTypes.ERROR);

            }
            return 0;
        }
Example #7
0
 partial void DeleteInvoiceRunReport(InvoiceRunReport instance);
Example #8
0
 partial void UpdateInvoiceRunReport(InvoiceRunReport instance);
Example #9
0
 partial void InsertInvoiceRunReport(InvoiceRunReport instance);