/* Copyright (C) 2014 konik.io * * This file is part of the Konik library. * * The Konik library is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * The Konik library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with the Konik library. If not, see <http://www.gnu.org/licenses/>. */ package io.konik.zugferd.entity; import io.konik.jaxb.adapter.ParameterProfileAdapter; import io.konik.validator.annotation.Basic; import io.konik.validator.annotation.Extended; import io.konik.zugferd.profile.ConformanceLevel; import io.konik.zugferd.profile.Profile; import io.konik.zugferd.unqualified.Indicator; import javax.validation.Valid; import javax.validation.constraints.NotNull; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlType; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import java.io.Serializable; /** * = The Exchanged Document Context * * Grouping of the properties of the message. */ @XmlType(name = "ExchangedDocumentContextType", propOrder = { "test", "businessProcess", "guideline" }) public class Context implements Serializable { @XmlElement(name = "TestIndicator") private Indicator test; @XmlElement(name = "BusinessProcessSpecifiedDocumentContextParameter") private Parameter businessProcess; @XmlElement(name = "GuidelineSpecifiedDocumentContextParameter", required = true) @XmlJavaTypeAdapter(ParameterProfileAdapter.class) private Profile guideline; /** * Instantiates a new context. */ public Context() { } /** * Instantiates a new context with a latest ZUGFeRD profile version. * * @param conformanceLevel the profile */ public Context(ConformanceLevel conformanceLevel) { this.guideline = new Profile(conformanceLevel); } /** * Checks if that invoice is for test purposes only and should not be processed in the target system. * * * Default:: +false+ * * @return true if this invoice is for testing purpose only */ @Basic public boolean isTest() { if (test == null) { return false; } return test.getIndicator(); } /** * Flags the invoice such that it should not be processed in the target system. * The sales tax liability does **NOT** arise. * This flag is used in particular in the introductory period of new business relationships. * * Default:: +false+ * * @return the context */ public Context setTest() { this.test = Indicator.trueIndicator(); return this; } /** * Flags the invoice such that it should be processed in the target system. * * The sales tax liability **does** arise. * This flag is used in particular in the introductory period of new business relationships. * * Default:: +false+ * * @return the context */ public Context setNotTest() { this.test = Indicator.falseIndicator(); return this; } /** * Gets the business process. * * Example:: production Materials, other Materials, freight Invoices * * @return the business process */ @Extended public String getBusinessProcess() { return businessProcess == null ? null : businessProcess.getId(); } /** * Sets the business process. * * Example:: production Materials, other Materials, freight Invoices * * @param businessProcess the new business process * @return the context */ public Context setBusinessProcess(String businessProcess) { this.businessProcess = new Parameter(businessProcess); return this; } /** * Gets the guideline or profile of the invoice * * Example:: +urn:ferd:CrossIndustryDocument:invoice:1p0:extended+ * * @return the profile */ @Basic @NotNull @Valid public Profile getGuideline() { return this.guideline; } /** * Sets the guideline or profile of the invoice * * Example:: +urn:ferd:CrossIndustryDocument:invoice:1p0:extended+ * * @param guideline the new profile * @return the context */ public Context setGuideline(Profile guideline) { this.guideline = guideline; return this; } }