@accordproject/cicero-engine
Version:
Cicero Engine - Node.js VM based implementation of Accord Protcol Template Specification execution
494 lines (490 loc) • 509 kB
JavaScript
/* Generated using ergo version 0.21.9 */
'use strict';
/*eslint-disable no-unused-vars*/
/*eslint-disable no-undef*/
/*eslint-disable no-var*/
/**
* Execute the smart clause
* @param {Context} context - the Accord context
* @param {org.accordproject.latedeliveryandpenalty.LateDeliveryAndPenaltyRequest} context.request - the incoming request
* @param {org.accordproject.latedeliveryandpenalty.LateDeliveryAndPenaltyResponse} context.response - the response
* @param {concerto.Event} context.emit - the emitted events
* @param {org.accordproject.runtime.State} context.state - the state
*/
function orgXaccordprojectXlatedeliveryandpenaltyXLateDeliveryAndPenalty_latedeliveryandpenalty(context) {
let pcontext = Object.assign(context, { 'request' : context.request });
return orgXaccordprojectXlatedeliveryandpenaltyXLateDeliveryAndPenalty.latedeliveryandpenalty(pcontext);
}
/* Generated using ergo version 0.21.9 */
'use strict';
/*eslint-disable no-unused-vars*/
/*eslint-disable no-undef*/
/*eslint-disable no-var*/
const inheritance=[ {
"sub": ("org.accordproject.latedeliveryandpenalty.LateDeliveryAndPenaltyResponse"),
"sup": ("org.accordproject.runtime.Response")
}, {
"sub": ("org.accordproject.latedeliveryandpenalty.LateDeliveryAndPenaltyResponse"),
"sup": ("concerto.Transaction")
}, {
"sub": ("org.accordproject.latedeliveryandpenalty.LateDeliveryAndPenaltyRequest"),
"sup": ("org.accordproject.runtime.Request")
}, {
"sub": ("org.accordproject.latedeliveryandpenalty.LateDeliveryAndPenaltyRequest"),
"sup": ("concerto.Transaction")
}, {
"sub": ("org.accordproject.latedeliveryandpenalty.TemplateModel"),
"sup": ("org.accordproject.contract.Clause")
}, {
"sub": ("org.accordproject.latedeliveryandpenalty.TemplateModel"),
"sup": ("concerto.Asset")
}, {
"sub": ("org.accordproject.time.PeriodUnit"),
"sup": ("concerto.Enum")
}, {
"sub": ("org.accordproject.time.TemporalUnit"),
"sup": ("concerto.Enum")
}, {
"sub": ("org.accordproject.time.Day"),
"sup": ("concerto.Enum")
}, {
"sub": ("org.accordproject.time.Month"),
"sup": ("concerto.Enum")
}, {
"sub": ("org.accordproject.ergo.stdlib.Error"),
"sup": ("org.accordproject.runtime.ErrorResponse")
}, {
"sub": ("org.accordproject.runtime.State"),
"sup": ("concerto.Asset")
}, {
"sub": ("org.accordproject.runtime.Obligation"),
"sup": ("concerto.Event")
}, {
"sub": ("org.accordproject.runtime.Response"),
"sup": ("concerto.Transaction")
}, {
"sub": ("org.accordproject.runtime.Request"),
"sup": ("concerto.Transaction")
}, {
"sub": ("org.accordproject.money.CurrencyCode"),
"sup": ("concerto.Enum")
}, {
"sub": ("org.accordproject.money.DigitalCurrencyCode"),
"sup": ("concerto.Enum")
}, {
"sub": ("org.accordproject.contract.Clause"),
"sup": ("concerto.Asset")
}, {
"sub": ("org.accordproject.contract.Contract"),
"sup": ("concerto.Asset")
}, {
"sub": ("org.accordproject.party.Party"),
"sup": ("concerto.Participant")
} ]
class orgXaccordprojectXlatedeliveryandpenaltyXLateDeliveryAndPenalty{
static main(constants0) {
{
let ret0;
{
let __lstate;
{
;
__lstate = recDot(constants0, "__state");;
{
let __lemit;
{
;
__lemit = recDot(constants0, "__emit");;
{
let __this;
{
;
__this = recDot(constants0, "__contract");;
{
let $match0;
{
;
$match0 = recDot(constants0, "request");;
{
let stratify0;
{
;
if (either(cast(array("org.accordproject.latedeliveryandpenalty.LateDeliveryAndPenaltyRequest"), $match0))) {
{
let $case0 = toLeft(cast(array("org.accordproject.latedeliveryandpenalty.LateDeliveryAndPenaltyRequest"), $match0));
stratify0 = {
"$left": ({
"$$main": ($case0)
})
};
}
} else {
{
let $case1 = toRight(cast(array("org.accordproject.latedeliveryandpenalty.LateDeliveryAndPenaltyRequest"), $match0));
stratify0 = {
"$right": (null)
};
}
};
if (either(stratify0)) {
{
let $case0 = toLeft(stratify0);
{
let $4;
{
;
$4 = $case0;;
{
let $main;
{
;
$main = recDot($4, "$$main");;
{
let __contract;
{
;
__contract = recDot(constants0, "__contract");;
{
let __state;
{
;
__state = __lstate;;
{
let __emit;
{
;
__emit = __lemit;;
{
let request;
{
;
request = $main;;
{
let __lstate$0;
{
;
__lstate$0 = recDot(constants0, "__state");;
{
let __lemit$0;
{
;
__lemit$0 = recDot(constants0, "__emit");;
{
let __this$0;
{
;
__this$0 = recDot(constants0, "__contract");;
{
let agreed;
{
;
agreed = recDot(unbrand(recDot(constants0, "request")), "agreedDelivery");;
{
let stratify0$A;
{
;
{
let p1;
{
;
p1 = agreed;;
{
let p2;
{
;
p2 = recDot(constants0, "__now");;
stratify0$A = dateTimeIsBefore(p1, p2);
}
}
}
};
if ((!stratify0$A)) {
ret0 = {
"$right": (brand(array("org.accordproject.ergo.stdlib.Error"), {
"message": ("Cannot exercise late delivery before delivery date")
}))
};
} else {
if ((!((!recDot(unbrand(recDot(constants0, "__contract")), "forceMajeure")) || (!recDot(unbrand(recDot(constants0, "request")), "forceMajeure"))))) {
ret0 = {
"$left": (recConcat(recConcat({
"__response": (brand(array("org.accordproject.latedeliveryandpenalty.LateDeliveryAndPenaltyResponse"), recConcat({
"penalty": (0.0)
}, {
"buyerMayTerminate": (true)
})))
}, {
"__state": (__lstate$0)
}), {
"__emit": (__lemit$0)
}))
};
} else {
{
let diff;
{
;
{
let stratify0$9;
{
;
{
let x;
{
;
x = recDot(constants0, "__now");;
{
let y;
{
;
y = agreed;;
{
let z;
{
;
z = {
"$class": (array("org.accordproject.time.TemporalUnit")),
"$data": ({
"$right": ({
"$right": ({
"$right": ({
"$left": ("days")
})
})
})
})
};;
{
let du;
{
;
{
let du$0;
{
;
{
let p1;
{
;
p1 = x;;
{
let p2;
{
;
p2 = y;;
du$0 = dateTimeDiff(p1, p2);
}
}
}
};
{
let stratify0$0;
{
;
{
let p0;
{
;
p0 = du$0;;
stratify0$0 = dateTimeDurationAmount(p0);
}
};
du = brand(array("org.accordproject.time.Duration"), recConcat({
"unit": ({
"$class": (array("org.accordproject.time.TemporalUnit")),
"$data": ({
"$left": ("seconds")
})
})
}, {
"amount": (stratify0$0)
}));
}
}
}
};
{
let u;
{
;
u = z;;
if (equal(u, recDot(unbrand(du), "unit"))) {
stratify0$9 = du;
} else {
{
let amount;
{
;
{
let $3;
{
;
$3 = u;;
{
let stratify0$8;
{
;
if (equal($3, {
"$class": (array("org.accordproject.time.TemporalUnit")),
"$data": ({
"$left": ("seconds")
})
})) {
stratify0$8 = {
"$left": ({
})
};
} else {
stratify0$8 = {
"$right": (null)
};
};
if (either(stratify0$8)) {
{
let $case0 = toLeft(stratify0$8);
{
let $2;
{
;
$2 = $case0;;
{
let $1;
{
;
$1 = recDot(unbrand(du), "unit");;
{
let stratify0$3;
{
;
if (equal($1, {
"$class": (array("org.accordproject.time.TemporalUnit")),
"$data": ({
"$right": ({
"$left": ("minutes")
})
})
})) {
stratify0$3 = {
"$left": ({
})
};
} else {
stratify0$3 = {
"$right": (null)
};
};
if (either(stratify0$3)) {
{
let $case0 = toLeft(stratify0$3);
{
let $0;
{
;
$0 = $case0;;
amount = natMult(recDot(unbrand(du), "amount"), {
"$nat": (60.0)
});
}
}
}
} else {
{
let $case1 = toRight(stratify0$3);
{
let stratify0$2;
{
;
if (equal($1, {
"$class": (array("org.accordproject.time.TemporalUnit")),
"$data": ({
"$right": ({
"$right": ({
"$left": ("hours")
})
})
})
})) {
stratify0$2 = {
"$left": ({
})
};
} else {
stratify0$2 = {
"$right": (null)
};
};
if (either(stratify0$2)) {
{
let $case0 = toLeft(stratify0$2);
{
let $0;
{
;
$0 = $case0;;
amount = natMult(natMult(recDot(unbrand(du), "amount"), {
"$nat": (60.0)
}), {
"$nat": (60.0)
});
}
}
}
} else {
{
let $case1 = toRight(stratify0$2);
{
let stratify0$1;
{
;
if (equal($1, {
"$class": (array("org.accordproject.time.TemporalUnit")),
"$data": ({
"$right": ({
"$right": ({
"$right": ({
"$left": ("days")
})
})
})
})
})) {
stratify0$1 = {
"$left": ({
})
};
} else {
stratify0$1 = {
"$right": (null)
};
};
if (either(stratify0$1)) {
{
let $case0 = toLeft(stratify0$1);
{
let $0;
{
;
$0 = $case0;;
amount = natMult(natMult(natMult(recDot(unbrand(du), "amount"), {
"$nat": (60.0)
}), {
"$nat": (60.0)
}), {
"$nat": (24.0)
});
}
}
}
} else {
{
let $case1 = toRight(stratify0$1);
{
let stratify0$0;
{
;
if (equal($1, {
"$class": (array("org.accordproject.time.TemporalUnit")),
"$data": ({
"$right": ({
"$right": ({
"$right": ({