org.openmrs.module.openhmis.cashier.web.controller.ReceiptController.java Source code

Java tutorial

Introduction

Here is the source code for org.openmrs.module.openhmis.cashier.web.controller.ReceiptController.java

Source

/*
 * The contents of this file are subject to the OpenMRS Public 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://license.openmrs.org
 *
 * Software distributed under the License is distributed on an "AS IS"
 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
 * the License for the specific language governing rights and
 * limitations under the License.
 *
 * Copyright (C) OpenHMIS.  All Rights Reserved.
 */
package org.openmrs.module.openhmis.cashier.web.controller;

import java.io.IOException;
import java.util.HashMap;

import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang3.StringUtils;

import org.openmrs.api.context.Context;
import org.openmrs.module.jasperreport.JasperReport;
import org.openmrs.module.jasperreport.ReportGenerator;
import org.openmrs.module.openhmis.cashier.ModuleSettings;
import org.openmrs.module.openhmis.cashier.api.IBillService;
import org.openmrs.module.openhmis.cashier.api.model.Bill;
import org.openmrs.module.openhmis.cashier.api.util.PrivilegeConstants;
import org.openmrs.module.openhmis.cashier.web.CashierWebConstants;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * Controller to manage the Receipt Generation Page
 */
@Controller
@RequestMapping(value = CashierWebConstants.RECEIPT)
public class ReceiptController {
    @RequestMapping(method = RequestMethod.GET)
    public void get(@RequestParam(value = "billId", required = false) Integer billId, HttpServletResponse response)
            throws IOException {
        if (billId == null) {
            response.sendError(HttpServletResponse.SC_NOT_FOUND);
            return;
        }

        IBillService service = Context.getService(IBillService.class);
        Bill bill = service.getById(billId);
        if (!validateBill(billId, bill, response)) {
            return;
        }

        JasperReport report = ModuleSettings.getReceiptReport();
        if (report == null) {
            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
                    "Configuration error: need to specify global " + "option for default report ID.");
            return;
        }

        if (generateReport(billId, response, bill, report)) {
            bill.setReceiptPrinted(true);
            service.save(bill);
        }
    }

    private boolean generateReport(Integer billId, HttpServletResponse response, Bill bill, JasperReport report)
            throws IOException {
        String name = report.getName();
        if (StringUtils.isEmpty(bill.getReceiptNumber())) {
            report.setName(bill.getReceiptNumber());
        } else {
            report.setName(String.valueOf(billId));
        }

        HashMap<String, Object> params = new HashMap<String, Object>();
        params.put("billId", bill.getId());

        try {
            ReportGenerator.generateHtmlAndWriteToResponse(report, params, response);
        } catch (IOException e) {
            if (StringUtils.isEmpty(bill.getReceiptNumber())) {
                response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
                        "Error generating report for receipt '" + bill.getReceiptNumber() + "'");
            } else {
                response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
                        "Error generating report for bill '" + billId + "'");
            }

            return false;
        } finally {
            // Reset the report name
            report.setName(name);
        }

        return true;
    }

    private boolean validateBill(Integer billId, Bill bill, HttpServletResponse response) throws IOException {
        if (bill == null) {
            response.sendError(HttpServletResponse.SC_NOT_FOUND,
                    "Could not find bill with bill Id '" + billId + "'");

            return false;
        }

        if (bill.isReceiptPrinted() && !Context.hasPrivilege(PrivilegeConstants.REPRINT_RECEIPT)) {
            if (StringUtils.isEmpty(bill.getReceiptNumber())) {
                response.sendError(HttpServletResponse.SC_FORBIDDEN,
                        "You do not have permission to reprint receipt '" + bill.getReceiptNumber() + "'");
            } else {
                response.sendError(HttpServletResponse.SC_FORBIDDEN,
                        "You do not have permission to reprint bill '" + billId + "'");
            }

            return false;
        }

        return true;
    }
}