/*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
var courseStatus = {
Created: {code: 1, text: 'Course Created'},
Registered: {code: 2, text: 'Course Registered'},
Dropped: {code: 3, text: 'Course Dropped'},
TuitionRequested: {code: 4, text: 'Tuition Requested'},
TuitionPaid: {code: 5, text: 'Tuition Paid'},
Refunded: {code: 6, text: 'Tuition Refunded'},
RegistrationStatusAccepted: {code: 7, text: 'Registration Status Accepted'},
RegistrationStatusDenied: {code: 8, text: 'Registration Status Denied'},
RegistrationStatusForwarded: {code: 9, text: 'Registration Status Forwarded'},
Cancelled: {code: 10, text: 'Course Cancelled'}
};
/**
* create a course to register
* @param {org.acme.Z2BTestNetwork.CreateCourse} register - the course to be processed
* @transaction
*/
function CreateCourse(register) {
console.log("In create course.");
register.course.student = register.student;
register.course.amountDue = register.amount;
register.course.amountPaid = 0.00;
register.course.created = new Date().toISOString();
register.course.status = JSON.stringify(courseStatus.Created);
return getAssetRegistry('org.acme.Z2BTestNetwork.Course')
.then(function (assetRegistry) {
return assetRegistry.update(register.course);
});
}
/**
* Record a course to register
* @param {org.acme.Z2BTestNetwork.RegisterCourse} register - the course to be processed
* @transaction
*/
function RegisterCourse(register) {
if (register.course.status == JSON.stringify(courseStatus.Created))
{
register.course.student = register.student;
register.course.registrar = register.registrar;
register.course.registered = new Date().toISOString();
register.course.status = JSON.stringify(courseStatus.Registered);
return getAssetRegistry('org.acme.Z2BTestNetwork.Course')
.then(function (assetRegistry) {
return assetRegistry.update(register.course);
});
}
}
/**
* Record a request to drop a course
* @param {org.acme.Z2BTestNetwork.DropCourse} register - the course to be processed
* @transaction
*/
function DropCourse(register) {
if (register.course.status == JSON.stringify(courseStatus.Created) || register.course.status == JSON.stringify(courseStatus.Registered))
{
register.course.student = register.student;
register.course.registrar = register.registrar;
register.course.dropped = new Date().toISOString();
register.course.status = JSON.stringify(courseStatus.Dropped);
return getAssetRegistry('org.acme.Z2BTestNetwork.Course')
.then(function (assetRegistry) {
return assetRegistry.update(register.course);
});
}
}
/**
* Record a request for tuition from student by cashier
* @param {org.acme.Z2BTestNetwork.RequestTuition} register - the course to be processed
* @transaction
*/
function RequestTuition(register) {
if (JSON.parse(register.course.status).code == courseStatus.RegistrationStatusForwarded.code)
{
register.course.student = register.student;
register.course.registrar = register.registrar;
register.course.cashier = register.cashier;
register.course.tuitionRequested = new Date().toISOString();
register.course.status = JSON.stringify(courseStatus.TuitionRequested);
return getAssetRegistry('org.acme.Z2BTestNetwork.Course')
.then(function (assetRegistry) {
return assetRegistry.update(register.course);
});
}
}
/**
* Record a tuition payment
* @param {org.acme.Z2BTestNetwork.PayTuition} register - the course to be processed
* @transaction
*/
function PayTuition(register) {
if (register.course.status == JSON.stringify(courseStatus.TuitionRequested))
{
register.course.student = register.student;
register.course.registrar = register.registrar;
register.course.cashier = register.cashier;
register.course.amountPaid += register.amountPaid;
register.course.amountDue -= register.amountPaid;
register.course.tuitionPaid = new Date().toISOString();
var _status = courseStatus.TuitionPaid;
_status.text += " Amount due: $" + register.course.amountDue.toString();
register.course.status = JSON.stringify(_status);
return getAssetRegistry('org.acme.Z2BTestNetwork.Course')
.then(function (assetRegistry) {
return assetRegistry.update(register.course);
});
}
}
/**
* Record a refund by cashier
* @param {org.acme.Z2BTestNetwork.RefundTuition} register - the course to be processed
* @transaction
*/
function RefundTuition(register) {
if (JSON.parse(register.course.status).code == courseStatus.RegistrationStatusForwarded.code || register.course.status == JSON.stringify(courseStatus.Cancelled))
{
register.course.student = register.student;
register.course.registrar = register.registrar;
register.course.cashier = register.cashier;
register.course.refundReason = register.reason;
register.course.amountRefunded += register.amountRefunded;
register.course.refunded = new Date().toISOString();
var _status = courseStatus.Refunded;
_status.text += " in the amount of $" + register.amountRefunded.toString();
register.course.status = JSON.stringify(_status);
return getAssetRegistry('org.acme.Z2BTestNetwork.Course')
.then(function (assetRegistry) {
return assetRegistry.update(register.course);
});
}
}
/**
* Record a acceptance of registration status update
* @param {org.acme.Z2BTestNetwork.AcceptRegistrationStatus} register - the course to be processed
* @transaction
*/
function AcceptRegistrationStatus(register) {
if ((register.course.status == JSON.stringify(courseStatus.Registered)))
{
register.course.student = register.student;
register.course.registrar = register.registrar;
register.course.cashier = register.cashier;
register.course.registrationStatusAccepted = new Date().toISOString();
register.course.registrationStatus = register.registrationStatus;
var _status = courseStatus.RegistrationStatusAccepted;
_status.text += " " + register.registrationStatus;
register.course.status = JSON.stringify(_status);
return getAssetRegistry('org.acme.Z2BTestNetwork.Course')
.then(function (assetRegistry) {
return assetRegistry.update(register.course);
});
} else if (register.course.status == JSON.stringify(courseStatus.Dropped)){
register.course.student = register.student;
register.course.registrar = register.registrar;
register.course.cashier = register.cashier;
register.course.registrationStatusAccepted = new Date().toISOString();
register.course.registrationStatus = register.registrationStatus;
var _status = courseStatus.RegistrationStatusAccepted;
_status.text += " " + register.registrationStatus;
register.course.status = JSON.stringify(_status);
return getAssetRegistry('org.acme.Z2BTestNetwork.Course')
.then(function (assetRegistry) {
return assetRegistry.update(register.course);
});
}
}
/**
* Record a rejection of registration status update
* @param {org.acme.Z2BTestNetwork.DenyRegistrationStatus} register - the course to be processed
* @transaction
*/
function DenyRegistrationStatus(register) {
if ((register.course.status == JSON.stringify(courseStatus.Registered)) || register.course.status == JSON.stringify(courseStatus.Dropped))
{
register.course.student = register.student;
register.course.registrar = register.registrar;
register.course.registrationRejectionReason = register.reasonForRejection;
register.course.registrationStatusDenied = new Date().toISOString();
var _status = courseStatus.RegistrationStatusDenied;
_status.text += " " + register.reasonForRejection;
register.course.status = JSON.stringify(_status);
return getAssetRegistry('org.acme.Z2BTestNetwork.Course')
.then(function (assetRegistry) {
return assetRegistry.update(register.course);
});
}
}
/**
* Record a forwarding of the registration change to the cashier
* @param {org.acme.Z2BTestNetwork.ForwardRegistrationStatus} register - the course to be processed
* @transaction
*/
function ForwardRegistrationStatus(register) {
if (JSON.parse(register.course.status).code == courseStatus.RegistrationStatusAccepted.code || JSON.parse(register.course.status).code == courseStatus.RegistrationStatusDenied.code)
{
register.course.student = register.student;
register.course.registrar = register.registrar;
register.course.registrationStatusForwarded = new Date().toISOString();
var _status = courseStatus.RegistrationStatusForwarded
_status.text += " " + register.course.registrationStatus;
register.course.status = JSON.stringify(_status);
return getAssetRegistry('org.acme.Z2BTestNetwork.Course')
.then(function (assetRegistry) {
return assetRegistry.update(register.course);
});
} else {
console.log('The course status ' + register.course.status + " is not correct");
}
}
/**
* Record a course cancellation
* @param {org.acme.Z2BTestNetwork.CancelCourse} register - the course to be processed
* @transaction
*/
function CancelCourse(register) {
register.course.student = register.student;
register.course.registrar = register.registrar;
register.course.cancelReason = register.reasonForCancellation;
register.course.registrationStatus = "Cancelled";
register.course.courseCancelled = new Date().toISOString();
register.course.status = JSON.stringify(courseStatus.Cancelled);
return getAssetRegistry('org.acme.Z2BTestNetwork.Course')
.then(function (assetRegistry) {
return assetRegistry.update(register.course);
});
}