S++Business systems language
DEMO SOURCE · SPP / APP / PHYRead the book

petshop-35-reservation.spp

petshop/reservation/petshop-35-reservation.spp

Download original file · Petstore source contents

1domain petshop;23Contract PetReservationAgreement {4    business("Reservation reference used to track an accepted application") String reservationNumber;5    Buyer buyer;6    Goods goods;7    int quantity;8    ReservationStatus status;9    ReservationRejectionReason rejectionReason;10}1112atomic check checkReservationQuantity(PetReservationAgreement) {13    require(PetReservationAgreement.quantity > 0, "INVALID_QUANTITY");14}1516atomic calculate preparePetReservation(Buyer, Goods, PetReservationAgreement) {17    PetReservationAgreement.buyer = Buyer;18    PetReservationAgreement.goods = Goods;19    PetReservationAgreement.status = ReservationStatus.ACCEPTED;20    PetReservationAgreement.rejectionReason = null;21}2223atomic calculate prepareReservationInventory(Goods, StockLine[]) {24    StockLine[] = new StockLine[] {25        new StockLine()26    };27    for (StockLine item : StockLine[]) {28        item.goods = Goods;29    }30}3132atomic calculate confirmPetReservation(PetReservationAgreement) {33    PetReservationAgreement.status = ReservationStatus.RESERVED;34}3536atomic calculate rejectPetReservation(StockLine[], PetReservationAgreement) {37    PetReservationAgreement.status = ReservationStatus.REJECTED;38    PetReservationAgreement.rejectionReason = ReservationRejectionReason.RESERVATION_NOT_COMPLETED;39    for (StockLine item : StockLine[]) {40        if (item.goods.sku == PetReservationAgreement.goods.sku41            && item.available < PetReservationAgreement.quantity) {42            PetReservationAgreement.rejectionReason = ReservationRejectionReason.INSUFFICIENT_STOCK;43        }44    }45}4647atomic update reserveRequestedInventory(StockLine[], PetReservationAgreement);