Example #1
0
        /// <summary>
        /// Prüft ob Rechnung erb.gv.at. konform ist:
        /// </summary>
        /// <returns>Eine <see cref="EbInterfaceResult"/> Instanz</returns>
        /// <remarks>
        /// Folgende Prüfungen werden durchgeführt
        /// <list type="bullet">
        ///  <item>Es werden nur Rechnungen  oder Gutschriften akzeptiert <see cref="DocumentType"/></item>
        ///  <item>eine Rechnung darf sich nur auf eine Bestellung beziehen</item>
        ///  <item>Bestellposition muss angegeben sein</item>
        ///  <item>CancelledOriginalDocument darf nicht angegeben sein</item>
        ///  <item>OrderID muss angegeben sein
        /// <para>Regeln:
        /// <list type="bullet">
        /// <item>3-stellig alphanumerisch oder</item>
        /// <item>3-stellig alphanumerisch ":" Irgendwas (Gesamtlänge maximal 35 Stellen)</item>
        /// <item>10-stellig numerisch</item>
        /// </list>
        /// </para>
        /// </item>
        ///  <item>Biller E-Mail verpflichtend</item>
        ///  <item>Max. 999 Rechnungszeilen</item>
        ///  <item>Skonto &gt; 0 und &lt; 100</item>
        ///  <item>Max. 2 Discount Elemente</item>
        ///  <item>Nur ein Benificiary Account</item>
        ///  <item>IBAN und BIC</item>
        ///  <item>Kein NoPayment</item>
        ///  <item>OrderId in ListLineItem darf nicht leer sein</item>
        ///  <item>GLN Optional</item>
        ///  <item>Invoice/Biller/InvoiceRecipientsBillerID 10 Stell. alphanumerisch</item>
        /// </list>
        /// </remarks>
        public EbInterfaceResult IsValidErbInvoice()
        {
            EbInterfaceResult result = new EbInterfaceResult();

            Schema.ebInterface5p0.InvoiceType invoice = Mapping.V5p0.MapInvoice.MapModelToV5p0(this);

            if (result.ResultType != ResultType.IsValid)
            {
                return(result);
            }
            if ((DocumentType != DocumentTypeType.Invoice) && (DocumentType != DocumentTypeType.CreditMemo))
            {
                result.ResultMessages.Add(new ResultMessage()
                {
                    Field    = "DocumentType",
                    Severity = MessageType.Error,
                    Message  = "Das Feld muss entweder DocumentTypeType.Invoice oder DocumentTypeType.CreditMemo enthalten"
                });
            }

            // A04 OrderID muss angegeben sein
            if ((InvoiceRecipient.OrderReference == null) || (InvoiceRecipient.OrderReference.OrderID == null))
            {
                result.ResultMessages.Add(new ResultMessage()
                {
                    Field    = "InvoiceRecipient.OrderReference.OrderID",
                    Severity = MessageType.Error,
                    Message  = "Das Feld InvoiceRecipient.OrderReference.OrderID darf nicht leer sein"
                });
                result.ResultType = ResultType.ErbValidationIssue;
                return(result);
            }
            if (string.IsNullOrWhiteSpace(InvoiceRecipient.OrderReference.OrderID))
            {
                result.ResultMessages.Add(new ResultMessage()
                {
                    Field    = "InvoiceRecipient.OrderReference.OrderID",
                    Severity = MessageType.Error,
                    Message  = "Das Feld InvoiceRecipient.OrderReference.OrderID darf nicht leer sein"
                });
            }

            //Regeln:
            // 3-stellig alphanumerisch oder
            // 3-stellig alphanumerisch „:“ Irgendwas (Gesamtlänge maximal 35 Stellen)
            // 10-stellig numerisch

            string msg = null;

            msg = IsValidOrderIdBund(InvoiceRecipient.OrderReference.OrderID, out OrderIdTypeType orderIdType);
            if (msg != null)
            {
                result.ResultMessages.Add(new ResultMessage()
                {
                    Field    = "InvoiceRecipient.OrderReference.OrderID",
                    Severity = MessageType.Error,
                    Message  = msg
                });
            }

            // A01 eine Rechnung = eine Bestellung
            // A02 Bestellposition muss angegeben sein
            // A12 OrderId in ListLineItem <> leer

            int n = 0;

            foreach (ItemListType itemListType in Details.ItemList)
            {
                int i = 0;
                foreach (ListLineItemType lineItem in itemListType.ListLineItem)
                {
                    if (orderIdType != OrderIdTypeType.EKGR) // Bei Einkäufergruppe muss keine Positionsnummer angegeben werden
                    {
                        if ((lineItem.InvoiceRecipientsOrderReference == null) ||
                            (lineItem.InvoiceRecipientsOrderReference.OrderPositionNumber == null) ||
                            (string.IsNullOrWhiteSpace(lineItem.InvoiceRecipientsOrderReference.OrderPositionNumber)))
                        {
                            result.ResultMessages.Add(new ResultMessage()
                            {
                                Field =
                                    string.Format(
                                        "Details.Itemlist[{0}].ListLineItem[{1}].InvoiceRecipientsOrderReference.OrderPositionNumber",
                                        n, i),
                                Severity = MessageType.Error,
                                Message  = string.Format("Das Feld darf nicht leer sein.")
                            });
                        }
                    }
                    else
                    {
                        if (InvoiceRecipient.OrderReference.OrderID != lineItem.InvoiceRecipientsOrderReference.OrderID)
                        {
                            result.ResultMessages.Add(new ResultMessage()
                            {
                                Field =
                                    string.Format(
                                        "Details.Itemlist[{0}].ListLineItem[{1}].InvoiceRecipientsOrderReference.OrderID", n, i),
                                Message =
                                    string.Format(
                                        "Das Feld muss gleich InvoiceRecipient.OrderReference.OrderID sein und darf nicht leer sein und soll mit InvoiceRecipient.OrderReference.OrderID übereinstimmen.",
                                        i)
                            });
                        }
                    }
                    i = i + 1;
                }
            }


            // A03 CancelledOriginalDocument darf nicht angegeben sein
            //if (!string.IsNullOrWhiteSpace(CancelledOriginalDocument))
            //{
            //    result.ResultMessages.Add(new ResultMessage()
            //    {
            //        Field = "CancelledOriginalDocument",
            //        Severity = MessageType.High,
            //        Message = "Das Feld muss leer sein"
            //    });

            //}


            // A05 Biller E-Mail verpflichtend
            if (Biller.Address.Email.Count() < 1)
            {
                result.ResultMessages.Add(new ResultMessage()
                {
                    Field    = "Biller.Address.Email",
                    Severity = MessageType.Error,
                    Message  = "Feld darf nicht leer sein und muss eine gültige E-Mail Adresse enthalten"
                });
            }
            // A06 Max. 999 Rechnungszeilen
            if (Details.ItemList[0].ListLineItem.Count() > 999)
            {
                result.ResultMessages.Add(new ResultMessage()
                {
                    Field    = "Details.ItemList[0].ListLineItem.Count()",
                    Severity = MessageType.Error,
                    Message  = "Es dürfen max. 999 Rechnungszeilen angegeben werden."
                });
            }
            // A08 Max. 2 Discount Elemente
            if (PaymentConditions.Discount != null)
            {
                if (PaymentConditions.Discount.Count() > 2)
                {
                    result.ResultMessages.Add(new ResultMessage()
                    {
                        Field    = "PaymentConditions.Discount.Count())",
                        Severity = MessageType.Error,
                        Message  = "Es dürfen max. 2 Discount Items angegeben werden."
                    });
                }

                // A07 Skonto >0 und < 100
                int i = 0;
                foreach (var discountType in PaymentConditions.Discount)
                {
                    if (!((discountType.Percentage > 0) && (discountType.Percentage < 100)))
                    {
                        result.ResultMessages.Add(new ResultMessage()
                        {
                            Field    = string.Format(" PaymentConditions.Discount[{0}].Percentage", i),
                            Severity = MessageType.Error,
                            Message  = "Der Wert muss > 0 und < 100 sein."
                        });
                    }
                    i = i + 1;
                }
            }
            // A09 Nur ein Benificiary Account
            //if (PaymentMethod is UniversalBankTransactionType)
            //{
            //    var benficiaryAccount = PaymentMethod as UniversalBankTransactionType;
            //    if (benficiaryAccount.BeneficiaryAccount.Count() > 1)
            //    {
            //        result.ResultMessages.Add(new ResultMessage()
            //        {
            //            Field = "PaymentMethod.BeneficiaryAccount.Count()",
            //            Severity = MessageType.High,
            //            Message = "Es darf nur ein BeneficiaryAccount angegeben werden"
            //        });
            //    }
            //    // A10 IBAN und BIC
            //    if (string.IsNullOrWhiteSpace(benficiaryAccount.BeneficiaryAccount[0].IBAN))
            //    {
            //        result.ResultMessages.Add(new ResultMessage()
            //        {
            //            Field = "PaymentMethod.BeneficiaryAccount.IBAN",
            //            Severity = MessageType.High,
            //            Message = "Das Feld darf nicht leer sein"
            //        });

            //    }
            //    if (string.IsNullOrWhiteSpace(benficiaryAccount.BeneficiaryAccount[0].BIC))
            //    {
            //        result.ResultMessages.Add(new ResultMessage()
            //        {
            //            Field = "PaymentMethod.BeneficiaryAccount.BIC",
            //            Severity = MessageType.High,
            //            Message = "Das Feld darf nicht leer sein"
            //        });

            //    }
            //}

            // A11 Kein NoPayment
            //if (PaymentMethod is NoPaymentType)
            //{
            //    result.ResultMessages.Add(new ResultMessage()
            //    {
            //        Field = "PaymentMethod",
            //        Severity = MessageType.High,
            //        Message = "Der Type darf nicht NoPaymentType sein"
            //    });

            //}

            // A14 GLN Optional
            if (Biller.InvoiceRecipientsBillerID != null)
            {
                // A14 Invoice/Biller/InvoiceRecipientsBillerID 10 Stell. alpha
                if (!((Biller.InvoiceRecipientsBillerID.Length <= 10) && (Biller.InvoiceRecipientsBillerID.Length >= 1)))
                {
                    result.ResultMessages.Add(new ResultMessage()
                    {
                        Field    = "Biller.InvoiceRecipientsBillerID",
                        Severity = MessageType.Error,
                        Message  = "Das Feld muss max. 10 Stell. lang sein"
                    });
                }
                else
                {
                    if (!Biller.InvoiceRecipientsBillerID.IsAlphaNum())
                    {
                        result.ResultMessages.Add(new ResultMessage()
                        {
                            Field    = "Biller.InvoiceRecipientsBillerID",
                            Severity = MessageType.Error,
                            Message  = "Das Feld darf nur  alphanumerische Zeichen enthalten."
                        });
                    }
                }
            }
            else
            {
                result.ResultMessages.Add(new ResultMessage()
                {
                    Field    = "Biller.InvoiceRecipientsBillerID",
                    Severity = MessageType.Error,
                    Message  = "Das Feld darf nicht null sein."
                });
            }
            if (result.ResultMessages.Count > 0)
            {
                result.ResultType = ResultType.ErbValidationIssue;
            }
            else
            {
                result.ResultType = ResultType.IsValid;
            }
            return(result);
        }
Example #2
0
 public void SaveTemplate(string filename)
 {
     Schema.ebInterface5p0.InvoiceType invoice = (Schema.ebInterface5p0.InvoiceType)Mapping.MapInvoice.MapToEbInterface(this, Models.EbIVersion.V5P0);
     invoice.SaveTemplate(filename);
 }