package eu.ggnet.dwoss.redtape; import eu.ggnet.dwoss.redtape.entity.Position; import eu.ggnet.dwoss.uniqueunit.entity.UniqueUnit; import eu.ggnet.dwoss.uniqueunit.entity.Product; import java.util.Random; import eu.ggnet.dwoss.configuration.GlobalConfig; import eu.ggnet.dwoss.rules.PositionType; import eu.ggnet.dwoss.util.MathUtil; import static eu.ggnet.dwoss.rules.PositionType.UNIT; import static eu.ggnet.dwoss.uniqueunit.entity.PriceType.CUSTOMER; /** * * @author oliver.guenther */ public class NaivBuilderUtil { private final static Random R = new Random(); /** * A navi way to create a position from a unit * <p> * @param uu the unit * @return a position */ public static Position unit(UniqueUnit uu) { return Position.builder() .type(UNIT) .amount(1) .uniqueUnitId(uu.getId()) .uniqueUnitProductId(uu.getProduct().getId()) .price(uu.getPrice(CUSTOMER)) .tax(GlobalConfig.TAX) .afterTaxPrice(MathUtil.roundedApply(uu.getPrice(CUSTOMER), GlobalConfig.TAX, 0.)) .name(uu.getProduct().getName() + " | SN:" + uu.getIdentifier(UniqueUnit.Identifier.SERIAL)) .description(uu.getProduct().getDescription()) .bookingAccount(-1) .build(); } public static Position comment() { return comment("TestKommentar", "Ein Test Kommentar"); } public static Position comment(String title, String description) { return Position.builder() .type(PositionType.COMMENT).name(title).description(description).build(); } /** * Returns a serice position with generated price and amount. * <p> * @return a serice position with generated price and amount. */ public static Position service() { return service((R.nextInt(100) + 1) * 0.25, R.nextInt(10000) * R.nextDouble()); } public static Position service(double amount, double price) { return Position.builder() .type(PositionType.SERVICE) .name("Service") .amount(amount) .price(price) .tax(GlobalConfig.TAX) .afterTaxPrice(MathUtil.roundedApply(price, GlobalConfig.TAX, 0.)) .description("Service Description") .build(); } /** * Creates a Product Batch Position with generated price and amount. * <p> * @param product the product * @return a Product Batch Position with generated price and amount. */ public static Position batch(Product product) { return batch(R.nextInt(20) + 1, R.nextInt(10000) * R.nextDouble(), product); } public static Position batch(int amount, double price, Product product) { return Position.builder() .type(PositionType.PRODUCT_BATCH) .uniqueUnitProductId(product.getId()) .amount(amount) .price(price) .tax(GlobalConfig.TAX) .afterTaxPrice(MathUtil.roundedApply(price, GlobalConfig.TAX, 0.)) .description(product.getDescription()) .name(product.getName()) .build(); } /** * Creates a Shipping Cost Position with generated price * <p> * @return a Shipping Cost Position with generated price */ public static Position shippingcost() { return shippingcost(R.nextInt(1000) * R.nextDouble()); } public static Position shippingcost(double price) { return Position.builder() .type(PositionType.SHIPPING_COST) .amount(1) .price(price) .tax(GlobalConfig.TAX) .afterTaxPrice(MathUtil.roundedApply(price, GlobalConfig.TAX, 0.)) .description("Shipping costs") .name("Shipping costs") .build(); } }