Java tutorial
/* * $Id$ * * Authors: * Jeff Buchbinder <jeff@freemedsoftware.org> * * FreeMED Electronic Medical Record and Practice Management System * Copyright (C) 1999-2012 FreeMED Software Foundation * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ package org.freemedsoftware.gwt.client.widget; import static org.freemedsoftware.gwt.client.i18n.I18nUtil._; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.HashMap; import java.util.List; import org.freemedsoftware.gwt.client.CurrentState; import org.freemedsoftware.gwt.client.CustomRequestCallback; import org.freemedsoftware.gwt.client.JsonUtil; import org.freemedsoftware.gwt.client.Util; import org.freemedsoftware.gwt.client.Util.ProgramMode; import org.freemedsoftware.gwt.client.i18n.AppConstants; import com.google.gwt.event.dom.client.ChangeEvent; import com.google.gwt.event.dom.client.ChangeHandler; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.http.client.Request; import com.google.gwt.http.client.RequestBuilder; import com.google.gwt.http.client.RequestCallback; import com.google.gwt.http.client.RequestException; import com.google.gwt.http.client.Response; import com.google.gwt.http.client.URL; import com.google.gwt.json.client.JSONParser; import com.google.gwt.user.client.Command; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.FlexTable; import com.google.gwt.user.client.ui.HTMLTable.RowFormatter; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.ListBox; import com.google.gwt.user.client.ui.TextArea; import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.VerticalPanel; public class LedgerWidget extends Composite { public enum PayCategory { PAYMENT, COPAY, ADJUSTMENT, WITHHOLD, DEDUCTABLE, TRANSFER, ALLOWEDAMOUNT, DENIAL, WRITEOFF, REFUND, REBILLED, MISTAKE, LEDGER }; protected String procId; protected String patientId; protected String procCovType; private VerticalPanel ledgerPanel; protected int commonFieldsCount; protected int fieldCounter; protected FlexTable ledgerFlexTable; protected Label payDateLb; protected CustomDatePicker payDate; protected Label amountLb; protected TextBox tbAmount; protected Label descLb; protected TextArea tbDesc; protected HorizontalPanel buttonsActionPanel; protected Label headLb; protected String[] insuranceList; protected String moduleName; protected String[] params; protected PayCategory paycat; protected CustomListBox paySrcList; protected CustomListBox payTypeList; protected TextBox tbCheckNo; protected TextBox tbCreditCardNo; protected CustomDatePicker expDate; protected ListBox yearsList; protected ListBox monthsList; protected String functionName; protected CustomRequestCallback callback; protected CustomListBox destinationList; protected CustomListBox insCompanyList; protected CustomListBox transferList; protected FlexTable ledgerInfoFlexTable; protected CustomListBox copaysList; protected CustomListBox deductList; protected CustomRadioButtonGroup paymentTypeGroup; protected String covid; protected String deductId; protected Label payTypelb; protected boolean hasInsurance = false; protected int covCount; public LedgerWidget(String prid, String pId, String pct, PayCategory pcat, CustomRequestCallback cb) { callback = cb; procId = prid; patientId = pId; procCovType = pct; paycat = pcat; ledgerPanel = new VerticalPanel(); ledgerPanel.setSpacing(10); initWidget(ledgerPanel); moduleName = "org.freemedsoftware.api.Ledger"; covCount = 0; createCommonElements(); handlePayCategory(paycat); } private void handlePayCategory(PayCategory paycat) { switch (paycat) { case PAYMENT: createPaymentUI(); break; case COPAY: createCopayUI(); break; case ADJUSTMENT: createAdjustmentUI(); break; case WITHHOLD: createWithholdUI(); break; case DEDUCTABLE: createDeductableUI(); break; case TRANSFER: createTransferUI(); break; case ALLOWEDAMOUNT: createAllowedAmmountUI(); break; case DENIAL: createDenialUI(); break; case WRITEOFF: createWriteoffUI(); break; case REFUND: createRefundUI(); break; case REBILLED: prepareDate(); break; case MISTAKE: prepareDate(); case LEDGER: createLedgerUI(); break; } } public void createCommonElements() { payDateLb = new Label(_("Date Received")); payDate = new CustomDatePicker(); payDate.setValue(Util.getSQLDate(new Date())); amountLb = new Label(); tbAmount = new TextBox(); descLb = new Label(_("Description")); tbDesc = new TextArea(); headLb = new Label(); headLb.setStyleName(AppConstants.STYLE_LABEL_LARGE_BOLD); ledgerPanel.add(headLb); ledgerFlexTable = new FlexTable(); // paymentFlexTable.setSize("100%", "100%"); ledgerPanel.add(ledgerFlexTable); buttonsActionPanel = new HorizontalPanel(); buttonsActionPanel.setSpacing(5); CustomButton submitBtn = new CustomButton(_("Submit"), AppConstants.ICON_SEND); submitBtn.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { prepareDate(); } }); CustomButton cancelBtn = new CustomButton(_("Cancel"), AppConstants.ICON_CANCEL); final LedgerWidget lw = this; cancelBtn.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { lw.removeFromParent(); callback.jsonifiedData("cancel"); } }); buttonsActionPanel.add(submitBtn); buttonsActionPanel.add(cancelBtn); } private void createPaymentUI() { if (!procId.equals("0")) { headLb.setText(_("Payment")); } else { headLb.setText(_("Patient Payment Responsibility")); } fieldCounter = 0; payTypelb = new Label("Payment Type"); paymentTypeGroup = new CustomRadioButtonGroup("actiontype"); paymentTypeGroup.addItem(_("Payment"), "1", new Command() { @Override public void execute() { createPayUI(); } }); paymentTypeGroup.addItem(_("Copay"), "2", new Command() { @Override public void execute() { createCopayUI(); } }); paymentTypeGroup.addItem(_("Deductable"), "3", new Command() { @Override public void execute() { createDeductableUI(); } }); paymentTypeGroup.setWidgetValue("1", true); } public void createPayUI() { fieldCounter = 0; ledgerFlexTable.clear(); ledgerFlexTable.setWidget(fieldCounter, 0, payTypelb); ledgerFlexTable.setWidget(fieldCounter, 1, paymentTypeGroup); fieldCounter++; if (procId.equals("0")) { Label paySrclb = new Label(_("Payment Source")); paySrcList = new CustomListBox(); paySrcList.addItem(_("Patient"), "0"); loadCoverageByType(1, paySrcList); loadCoverageByType(2, paySrcList); loadCoverageByType(3, paySrcList); loadCoverageByType(4, paySrcList); ledgerFlexTable.setWidget(fieldCounter, 0, paySrclb); ledgerFlexTable.setWidget(fieldCounter, 1, paySrcList); fieldCounter++; } else { if (procCovType.equals("0")) { paymentTypeGroup.customRadioButtonGroup.get(1).setEnabled(false); paymentTypeGroup.customRadioButtonGroup.get(2).setEnabled(false); } else { hasInsurance = true; } } Label payMethodlb = new Label("Payment Method"); payTypeList = new CustomListBox(); payTypeList.addItem(_("NONE SELECTED"), ""); payTypeList.addItem(_("cash"), "0"); payTypeList.addItem(_("cheque"), "1"); payTypeList.addItem(_("money order"), "2"); payTypeList.addItem(_("credit card"), "3"); payTypeList.addItem(_("traveler's check"), "4"); payTypeList.addItem(_("EFT"), "5"); payTypeList.addChangeHandler(new ChangeHandler() { @Override public void onChange(ChangeEvent event) { if (payTypeList.getSelectedIndex() != 0) { handlePaymentType(payTypeList.getValue(payTypeList.getSelectedIndex())); } } }); ledgerFlexTable.setWidget(fieldCounter, 0, payMethodlb); ledgerFlexTable.setWidget(fieldCounter, 1, payTypeList); fieldCounter++; payDateLb.setText(_("Date Received")); ledgerFlexTable.setWidget(fieldCounter, 0, payDateLb); ledgerFlexTable.setWidget(fieldCounter, 1, payDate); fieldCounter++; amountLb.setText(_("Payment Amount")); ledgerFlexTable.setWidget(fieldCounter, 0, amountLb); tbAmount.setText(""); tbAmount.setEnabled(true); tbAmount.setVisible(true); ledgerFlexTable.setWidget(fieldCounter, 1, tbAmount); fieldCounter++; commonFieldsCount = fieldCounter; ledgerPanel.add(buttonsActionPanel); } private void handlePaymentType(String payType) { fieldCounter = commonFieldsCount; if (payType.equals("1") || payType.equals("4")) { Label chequeNoLb = new Label(_("Cheque Number")); tbCheckNo = new TextBox(); ledgerFlexTable.setWidget(fieldCounter, 0, chequeNoLb); ledgerFlexTable.setWidget(fieldCounter, 1, tbCheckNo); fieldCounter++; } else if (payType.equals("3")) { Label creditCardNoLb = new Label(_("Credit Card Number")); tbCreditCardNo = new TextBox(); ledgerFlexTable.setWidget(fieldCounter, 0, creditCardNoLb); ledgerFlexTable.setWidget(fieldCounter, 1, tbCreditCardNo); fieldCounter++; Label expDateLb = new Label(_("Expiration Date")); monthsList = new ListBox(); for (int i = 1; i <= 12; i++) { monthsList.addItem("" + i); } Label lb = new Label("/"); Calendar calendar = new GregorianCalendar(); yearsList = new ListBox(); int year = calendar.get(Calendar.YEAR); for (int i = 1; i < 13; i++) { yearsList.addItem(year + ""); year++; } HorizontalPanel hp = new HorizontalPanel(); hp.add(monthsList); hp.add(lb); hp.add(yearsList); ledgerFlexTable.setWidget(fieldCounter, 0, expDateLb); ledgerFlexTable.setWidget(fieldCounter, 1, hp); fieldCounter++; } else if (!payType.equals("0")) { Window.alert("Not Implemented Yet."); } if (commonFieldsCount != fieldCounter || payType.equals("0")) { descLb.setText("Description"); ledgerFlexTable.setWidget(fieldCounter, 0, descLb); ledgerFlexTable.setWidget(fieldCounter, 1, tbDesc); fieldCounter++; } } @SuppressWarnings("unchecked") private void createCopayUI() { // headLb.setText("Copay"); fieldCounter = 0; ledgerFlexTable.clear(); ledgerFlexTable.setWidget(fieldCounter, 0, payTypelb); ledgerFlexTable.setWidget(fieldCounter, 1, paymentTypeGroup); fieldCounter++; Label payMethodlb = new Label("Payment Method"); payTypeList = new CustomListBox(); payTypeList.addItem(_("NONE SELECTED"), ""); payTypeList.addItem(_("cash"), "0"); payTypeList.addItem(_("cheque"), "1"); payTypeList.addItem(_("money order"), "2"); payTypeList.addItem(_("credit card"), "3"); payTypeList.addItem(_("traveler's check"), "4"); payTypeList.addItem(_("EFT"), "5"); payTypeList.addChangeHandler(new ChangeHandler() { @Override public void onChange(ChangeEvent event) { if (payTypeList.getSelectedIndex() != 0) { handlePaymentType(payTypeList.getValue(payTypeList.getSelectedIndex())); } } }); ledgerFlexTable.setWidget(fieldCounter, 0, payMethodlb); ledgerFlexTable.setWidget(fieldCounter, 1, payTypeList); fieldCounter++; payDateLb.setText("Date of Copay"); ledgerFlexTable.setWidget(fieldCounter, 0, payDateLb); ledgerFlexTable.setWidget(fieldCounter, 1, payDate); fieldCounter++; amountLb.setText("Copay Amount"); ledgerFlexTable.setWidget(fieldCounter, 0, amountLb); copaysList = new CustomListBox(); copaysList.addItem("NONE SELECTED", "0"); covid = ""; ArrayList params = new ArrayList(); params.add(patientId); params.add(procId); Util.callApiMethod("Ledger", "getCoveragesCopayInfo", params, new CustomRequestCallback() { @Override public void onError() { } @Override public void jsonifiedData(Object data) { if (data != null) { HashMap<String, String> result = (HashMap<String, String>) data; tbAmount.setText(""); // tbAmount.setEnabled(false); if (result != null) { tbAmount.setText(result.get("copay")); covid = result.get("Id"); // tbAmount.setEnabled(false); } } } }, "HashMap<String,String>"); ledgerFlexTable.setWidget(fieldCounter, 1, tbAmount); fieldCounter++; commonFieldsCount = fieldCounter; ledgerPanel.add(buttonsActionPanel); } private void createAdjustmentUI() { headLb.setText(_("Adjustment")); fieldCounter = 0; ledgerFlexTable.setWidget(fieldCounter, 0, payDateLb); ledgerFlexTable.setWidget(fieldCounter, 1, payDate); fieldCounter++; ledgerFlexTable.setWidget(fieldCounter, 0, descLb); ledgerFlexTable.setWidget(fieldCounter, 1, tbDesc); fieldCounter++; amountLb.setText(_("Adjustment Amount")); ledgerFlexTable.setWidget(fieldCounter, 0, amountLb); ledgerFlexTable.setWidget(fieldCounter, 1, tbAmount); fieldCounter++; ledgerPanel.add(buttonsActionPanel); } private void createWithholdUI() { headLb.setText(_("Withhold")); fieldCounter = 0; ledgerFlexTable.setWidget(fieldCounter, 0, payDateLb); ledgerFlexTable.setWidget(fieldCounter, 1, payDate); fieldCounter++; ledgerFlexTable.setWidget(fieldCounter, 0, descLb); ledgerFlexTable.setWidget(fieldCounter, 1, tbDesc); fieldCounter++; amountLb.setText(_("Withhold Amount")); ledgerFlexTable.setWidget(fieldCounter, 0, amountLb); ledgerFlexTable.setWidget(fieldCounter, 1, tbAmount); fieldCounter++; ledgerPanel.add(buttonsActionPanel); } @SuppressWarnings("unchecked") private void createDeductableUI() { // headLb.setText("Deductable"); fieldCounter = 0; ledgerFlexTable.clear(); ledgerFlexTable.setWidget(fieldCounter, 0, payTypelb); ledgerFlexTable.setWidget(fieldCounter, 1, paymentTypeGroup); fieldCounter++; Label payMethodlb = new Label(_("Payment Method")); payTypeList = new CustomListBox(); payTypeList.addItem(_("NONE SELECTED"), ""); payTypeList.addItem(_("cash"), "0"); payTypeList.addItem(_("cheque"), "1"); payTypeList.addItem(_("money order"), "2"); payTypeList.addItem(_("credit card"), "3"); payTypeList.addItem(_("traveler's check"), "4"); payTypeList.addItem(_("EFT"), "5"); payTypeList.addChangeHandler(new ChangeHandler() { @Override public void onChange(ChangeEvent event) { if (payTypeList.getSelectedIndex() != 0) { handlePaymentType(payTypeList.getValue(payTypeList.getSelectedIndex())); } } }); ledgerFlexTable.setWidget(fieldCounter, 0, payMethodlb); ledgerFlexTable.setWidget(fieldCounter, 1, payTypeList); fieldCounter++; payDateLb.setText(_("Date of Deductible")); ledgerFlexTable.setWidget(fieldCounter, 0, payDateLb); ledgerFlexTable.setWidget(fieldCounter, 1, payDate); fieldCounter++; amountLb.setText(_("Deductable Amount")); ledgerFlexTable.setWidget(fieldCounter, 0, amountLb); deductList = new CustomListBox(); deductList.addItem(_("NONE SELECTED"), "0"); covid = ""; ArrayList params = new ArrayList(); params.add(patientId); params.add(procId); Util.callApiMethod("Ledger", "getCoveragesDeductableInfo", params, new CustomRequestCallback() { @Override public void onError() { } @Override public void jsonifiedData(Object data) { if (data != null) { HashMap<String, String> result = (HashMap<String, String>) data; tbAmount.setText(""); // tbAmount.setEnabled(false); if (result != null) { tbAmount.setText(result.get("deduct")); covid = result.get("Id"); } } } }, "HashMap<String,String>"); ledgerFlexTable.setWidget(fieldCounter, 1, tbAmount); fieldCounter++; commonFieldsCount = fieldCounter; ledgerPanel.add(buttonsActionPanel); } private void createTransferUI() { headLb.setText(_("Transfer")); fieldCounter = 0; payDateLb.setText(_("Date of Transfer")); ledgerFlexTable.setWidget(fieldCounter, 0, payDateLb); ledgerFlexTable.setWidget(fieldCounter, 1, payDate); fieldCounter++; ledgerFlexTable.setWidget(fieldCounter, 0, descLb); ledgerFlexTable.setWidget(fieldCounter, 1, tbDesc); fieldCounter++; Label transferToLb = new Label(_("Transfer to")); ledgerFlexTable.setWidget(fieldCounter, 0, transferToLb); transferList = new CustomListBox(); transferList.addItem("Patient", "0"); loadInsuranceList(transferList); ledgerFlexTable.setWidget(fieldCounter, 1, transferList); fieldCounter++; ledgerPanel.add(buttonsActionPanel); } private void createAllowedAmmountUI() { headLb.setText(_("Allowed Amount")); fieldCounter = 0; Label insCompanyLb = new Label(_("Insurance Company")); ledgerFlexTable.setWidget(fieldCounter, 0, insCompanyLb); insCompanyList = new CustomListBox(); loadInsuranceList(insCompanyList); ledgerFlexTable.setWidget(fieldCounter, 1, insCompanyList); fieldCounter++; payDateLb.setText(_("Date Received")); ledgerFlexTable.setWidget(fieldCounter, 0, payDateLb); ledgerFlexTable.setWidget(fieldCounter, 1, payDate); fieldCounter++; ledgerFlexTable.setWidget(fieldCounter, 0, descLb); ledgerFlexTable.setWidget(fieldCounter, 1, tbDesc); fieldCounter++; amountLb.setText(_("Allowed Amount")); ledgerFlexTable.setWidget(fieldCounter, 0, amountLb); ledgerFlexTable.setWidget(fieldCounter, 1, tbAmount); fieldCounter++; ledgerPanel.add(buttonsActionPanel); } private void createDenialUI() { headLb.setText(_("Denial")); fieldCounter = 0; payDateLb.setText(_("Date of Denial")); ledgerFlexTable.setWidget(fieldCounter, 0, payDateLb); ledgerFlexTable.setWidget(fieldCounter, 1, payDate); fieldCounter++; ledgerFlexTable.setWidget(fieldCounter, 0, descLb); ledgerFlexTable.setWidget(fieldCounter, 1, tbDesc); fieldCounter++; Label adjustZeroLb = new Label(_("Adjust to Zero?")); ledgerFlexTable.setWidget(fieldCounter, 0, adjustZeroLb); CustomListBox adjustZeroList = new CustomListBox(); adjustZeroList.addItem(_("No")); adjustZeroList.addItem(_("Yes")); ledgerFlexTable.setWidget(fieldCounter, 1, adjustZeroList); fieldCounter++; ledgerPanel.add(buttonsActionPanel); } private void createWriteoffUI() { headLb.setText(_("Writeoff")); fieldCounter = 0; payDateLb.setText(_("Date of Writeoff")); ledgerFlexTable.setWidget(fieldCounter, 0, payDateLb); ledgerFlexTable.setWidget(fieldCounter, 1, payDate); fieldCounter++; ledgerFlexTable.setWidget(fieldCounter, 0, descLb); ledgerFlexTable.setWidget(fieldCounter, 1, tbDesc); fieldCounter++; ledgerPanel.add(buttonsActionPanel); } private void createRefundUI() { headLb.setText(_("Refund")); fieldCounter = 0; payDateLb.setText(_("Date of Refund")); ledgerFlexTable.setWidget(fieldCounter, 0, payDateLb); ledgerFlexTable.setWidget(fieldCounter, 1, payDate); fieldCounter++; Label destinationLb = new Label(_("Destination")); ledgerFlexTable.setWidget(fieldCounter, 0, destinationLb); destinationList = new CustomListBox(); destinationList.addItem(_("Apply to Credit"), "0"); destinationList.addItem(_("Refund to Patient"), "1"); ledgerFlexTable.setWidget(fieldCounter, 1, destinationList); fieldCounter++; ledgerFlexTable.setWidget(fieldCounter, 0, descLb); ledgerFlexTable.setWidget(fieldCounter, 1, tbDesc); fieldCounter++; amountLb.setText(_("Refund Amount")); ledgerFlexTable.setWidget(fieldCounter, 0, amountLb); ledgerFlexTable.setWidget(fieldCounter, 1, tbAmount); fieldCounter++; ledgerPanel.add(buttonsActionPanel); } private void createLedgerUI() { ledgerInfoFlexTable = new FlexTable(); ledgerPanel.add(ledgerInfoFlexTable); ledgerInfoFlexTable.setSize("100%", "100%"); ledgerInfoFlexTable.setText(0, 0, _("Date")); ledgerInfoFlexTable.setText(0, 1, _("Type")); ledgerInfoFlexTable.setText(0, 2, _("Description")); ledgerInfoFlexTable.setText(0, 3, _("Charges")); ledgerInfoFlexTable.setText(0, 4, _("Payments")); ledgerInfoFlexTable.setText(0, 5, _("Balance")); RowFormatter rowFormatter = ledgerInfoFlexTable.getRowFormatter(); rowFormatter.setStyleName(0, AppConstants.STYLE_TABLE_HEADER); CustomButton closeBtn = new CustomButton(_("Cancel"), AppConstants.ICON_CANCEL); final LedgerWidget lw = this; closeBtn.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { lw.removeFromParent(); callback.jsonifiedData("cancel"); } }); ledgerPanel.add(closeBtn); prepareDate(); } public void loadInsuranceList(final CustomListBox insList) { if (Util.getProgramMode() == ProgramMode.JSONRPC) { // //////////////////// String[] params = { procId }; RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, URL.encode( Util.getJsonRequest("org.freemedsoftware.module.ProcedureModule.getCoverages", params))); try { builder.sendRequest(null, new RequestCallback() { public void onError(com.google.gwt.http.client.Request request, Throwable ex) { } @SuppressWarnings("unchecked") public void onResponseReceived(com.google.gwt.http.client.Request request, com.google.gwt.http.client.Response response) { if (200 == response.getStatusCode()) { if (Util.checkValidSessionResponse(response.getText())) { try { HashMap<String, String>[] result = (HashMap<String, String>[]) JsonUtil .shoehornJson(JSONParser.parseStrict(response.getText()), "HashMap<String,String>[]"); if (result != null) { if (result.length != 0) { hasInsurance = true; for (int i = 0; i < result.length; i++) { insList.addItem(result[i].get("payer"), result[i].get("id")); } } else { } } else { paymentTypeGroup.customRadioButtonGroup.get(1).setEnabled(false); paymentTypeGroup.customRadioButtonGroup.get(2).setEnabled(false); } } catch (Exception e) { //Window.alert(e.getMessage()); //paymentTypeGroup.customRadioButtonGroup.get(2).setEnabled(false); } } } else { } } }); } catch (RequestException e) { Window.alert(e.toString()); } } else { } } private void prepareDate() { functionName = ""; boolean isHandled = false; ArrayList<String> parameters = new ArrayList<String>(); String errMsg = ""; if (paycat == PayCategory.PAYMENT) { parameters.add(procId); parameters.add(payDate.getTextBox().getText()); if (payTypeList.getValue(payTypeList.getSelectedIndex()).equals("0")) { functionName = moduleName + ".post_payment_cash"; } else if (payTypeList.getValue(payTypeList.getSelectedIndex()).equals("1") || payTypeList.getValue(payTypeList.getSelectedIndex()).equals("4")) { functionName = moduleName + ".post_payment_check"; parameters.add(tbCheckNo.getText()); if (tbCheckNo.getText() == null || tbCheckNo.getText().equals("")) { errMsg += _("Please enter the check number.") + "\n"; } if (payTypeList.getValue(payTypeList.getSelectedIndex()).equals("1")) { parameters.add("1"); } else { parameters.add("4"); } } else if (payTypeList.getValue(payTypeList.getSelectedIndex()).equals("3")) { functionName = moduleName + ".post_payment_credit_card"; parameters.add(tbCreditCardNo.getText()); if (tbCreditCardNo.getText() == null || tbCreditCardNo.getText().equals("")) { errMsg += _("Please enter the credit card number.") + "\n"; } parameters.add(monthsList.getValue(monthsList.getSelectedIndex())); parameters.add(yearsList.getValue(yearsList.getSelectedIndex())); } else { errMsg += _("Please select the payment type.") + "\n"; } if (paymentTypeGroup.getWidgetValue().equals("1")) { String tempMsg = validateIntegerTextBox(tbAmount, _("Payment Amount")); if (!tempMsg.equals("")) { errMsg += tempMsg + "\n"; } parameters.add(tbAmount.getText()); parameters.add(tbDesc.getText()); if (procId.equals("0")) { parameters.add(patientId); parameters.add(paySrcList.getStoredValue()); } } else if (paymentTypeGroup.getWidgetValue().equals("2")) { String tempMsg = validateIntegerTextBox(tbAmount, _("Copay Amount")); if (!tempMsg.equals("")) { errMsg += tempMsg + "\n"; } parameters.add(tbAmount.getText()); parameters.add(tbDesc.getText()); parameters.add(patientId); if (covid.trim().equals("")) parameters.add("0"); else parameters.add(covid); parameters.add("11"); // copay } else if (paymentTypeGroup.getWidgetValue().equals("3")) { String tempMsg = validateIntegerTextBox(tbAmount, _("Deductible Amount")); if (!tempMsg.equals("")) { errMsg += tempMsg + "\n"; } parameters.add(tbAmount.getText()); parameters.add(tbDesc.getText()); parameters.add(patientId); if (covid.trim().equals("")) parameters.add("0"); else parameters.add(covid); parameters.add("8"); // deductible } } else if (paycat == PayCategory.ADJUSTMENT) { functionName = moduleName + ".post_adjustment"; parameters.add(procId); String tempMsg = validateIntegerTextBox(tbAmount, _("Adjustment Amount")); if (!tempMsg.equals("")) { errMsg += tempMsg + "\n"; } parameters.add(tbAmount.getText()); parameters.add(tbDesc.getText()); } else if (paycat == PayCategory.WITHHOLD) { functionName = moduleName + ".post_withhold"; parameters.add(procId); String tempMsg = validateIntegerTextBox(tbAmount, _("Withhold Amount")); if (!tempMsg.equals("")) { errMsg += tempMsg + "\n"; } parameters.add(tbAmount.getText()); parameters.add(tbDesc.getText()); } else if (paycat == PayCategory.WRITEOFF) { functionName = moduleName + ".PostWriteoff"; parameters.add(procId); parameters.add(tbDesc.getText()); } else if (paycat == PayCategory.ALLOWEDAMOUNT) { functionName = moduleName + ".post_fee_adjustment"; parameters.add(procId); if (insCompanyList.getStoredValue() != null && !insCompanyList.getStoredValue().equals("0")) parameters.add(insCompanyList.getStoredValue()); else parameters.add("0"); String tempMsg = validateIntegerTextBox(tbAmount, _("Allowed Amount")); if (!tempMsg.equals("")) { errMsg += tempMsg + "\n"; } parameters.add(tbAmount.getText()); parameters.add(tbDesc.getText()); } else if (paycat == PayCategory.DENIAL) { functionName = moduleName + ".move_to_next_coverage"; parameters.add(procId); } else if (paycat == PayCategory.REFUND) { functionName = moduleName + ".post_refund"; parameters.add(procId); String tempMsg = validateIntegerTextBox(tbAmount, "Refund Amount"); if (!tempMsg.equals("")) { errMsg += tempMsg + "\n"; } parameters.add(tbAmount.getText()); parameters.add(destinationList.getStoredValue()); parameters.add(tbDesc.getText()); } else if (paycat == PayCategory.REBILLED) { functionName = moduleName + ".queue_for_rebill"; parameters.add(procId); parameters.add(procCovType); } else if (paycat == PayCategory.TRANSFER) { functionName = moduleName + ".post_transfer"; parameters.add(procId); parameters.add(transferList.getStoredValue()); parameters.add(tbDesc.getText()); } else if (paycat == PayCategory.MISTAKE) { functionName = moduleName + ".mistake"; parameters.add(procId); } else if (paycat == PayCategory.LEDGER) { isHandled = true; functionName = moduleName + ".getLedgerInfo"; parameters.add(procId); params = (String[]) parameters.toArray(new String[0]); getLedgerInfo(); } if (!isHandled) { if (!errMsg.equals("")) { Window.alert(errMsg); return; } else { params = (String[]) parameters.toArray(new String[0]); processPayment(); } } } private void processPayment() { JsonUtil.debug("before saving"); final LedgerWidget lw = this; RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, URL.encode(Util.getJsonRequest(functionName, params))); try { builder.sendRequest(null, new RequestCallback() { public void onError(Request request, Throwable ex) { } public void onResponseReceived(Request request, Response response) { if (200 == response.getStatusCode()) { try { Boolean result = (Boolean) JsonUtil .shoehornJson(JSONParser.parseStrict(response.getText()), "Boolean"); if (result) { Util.showInfoMsg("Ledger", _("Payment operation succeeded.")); lw.removeFromParent(); if (paycat == PayCategory.PAYMENT || paycat == PayCategory.COPAY || paycat == PayCategory.DEDUCTABLE) { if (CurrentState.getSystemConfig("auto_print_ptrcpt").equals("1")) { printShortPatientReceipt(); } } if ((paycat == PayCategory.REBILLED || paycat == PayCategory.WRITEOFF) && !procId.equals("0")) { callback.jsonifiedData("close"); } else { callback.jsonifiedData("update"); } } else { Util.showErrorMsg("Ledger", _("Payment operation failed.")); } } catch (Exception e) { Util.showErrorMsg("Ledger", _("Payment operation failed.")); } } else { Util.showErrorMsg("Ledger", _("Payment operation failed.")); } } }); } catch (RequestException e) { } } private void getLedgerInfo() { final LedgerWidget lw = this; RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, URL.encode(Util.getJsonRequest(functionName, params))); try { builder.sendRequest(null, new RequestCallback() { public void onError(Request request, Throwable ex) { } @SuppressWarnings("unchecked") public void onResponseReceived(Request request, Response response) { if (200 == response.getStatusCode()) { HashMap<String, String>[] result = (HashMap<String, String>[]) JsonUtil.shoehornJson( JSONParser.parseStrict(response.getText()), "HashMap<String,String>[]"); if (result.length > 0) { for (int i = 0; i < result.length; i++) { int row = ledgerInfoFlexTable.getRowCount(); if (i != (result.length - 1)) { ledgerInfoFlexTable.setText(row, 0, result[i].get("date")); ledgerInfoFlexTable.setText(row, 1, result[i].get("type")); ledgerInfoFlexTable.setText(row, 2, result[i].get("desc")); ledgerInfoFlexTable.setText(row, 3, result[i].get("charge")); ledgerInfoFlexTable.setText(row, 4, result[i].get("payment")); ledgerInfoFlexTable.setText(row, 5, ""); if ((i % 2) == 0) { RowFormatter rowFormatter = ledgerInfoFlexTable.getRowFormatter(); rowFormatter.setStyleName(row, AppConstants.STYLE_TABLE_ROW); } else { RowFormatter rowFormatter = ledgerInfoFlexTable.getRowFormatter(); rowFormatter.setStyleName(row, AppConstants.STYLE_TABLE_ROW_ALTERNATE); } } else { ledgerInfoFlexTable.setText(row, 0, _("Total")); ledgerInfoFlexTable.setText(row, 3, result[i].get("total_charges")); ledgerInfoFlexTable.setText(row, 4, result[i].get("total_payments")); int charges = new Integer(result[i].get("total_charges")); int payments = new Integer(result[i].get("total_payments")); ledgerInfoFlexTable.setText(row, 5, "" + (charges - payments)); RowFormatter rowFormatter = ledgerInfoFlexTable.getRowFormatter(); rowFormatter.setStyleName(row, AppConstants.STYLE_TABLE_HEADER); } } } else { } } else { } } }); } catch (RequestException e) { } } public void loadCoverageByType(final int type, final CustomListBox lb) { if (Util.getProgramMode() == ProgramMode.JSONRPC) { // //////////////////// String[] params = { patientId, type + "" }; RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, URL.encode( Util.getJsonRequest("org.freemedsoftware.module.PatientCoverages.GetCoverageByType", params))); try { builder.sendRequest(null, new RequestCallback() { public void onError(com.google.gwt.http.client.Request request, Throwable ex) { } @SuppressWarnings("unchecked") public void onResponseReceived(com.google.gwt.http.client.Request request, com.google.gwt.http.client.Response response) { if (200 == response.getStatusCode()) { if (Util.checkValidSessionResponse(response.getText())) { try { // Window.alert("Response is:"+type+" // :"+response.getText()); covCount++; HashMap<String, String>[] result = (HashMap<String, String>[]) JsonUtil .shoehornJson(JSONParser.parseStrict(response.getText()), "HashMap<String,String>[]"); if (result != null) { if (result.length != 0) { hasInsurance = true; String typeName = ""; if (type == 1) typeName = _("Primary") + " "; else if (type == 2) typeName = _("Secondary") + " "; else if (type == 3) typeName = _("Tertiary") + " "; else if (type == 4) typeName = _("Work Comp") + " "; for (int i = 0; i < result.length; i++) { HashMap<String, String> m = (HashMap<String, String>) result[i]; lb.addItem(typeName + "- " + m.get("comp_name"), m.get("Id")); } } else { } if (covCount == 4 && !hasInsurance) { paymentTypeGroup.customRadioButtonGroup.get(1).setEnabled(false); paymentTypeGroup.customRadioButtonGroup.get(2).setEnabled(false); } } } catch (Exception e) { // Window.alert(e.getMessage()); } } } else { } } }); } catch (RequestException e) { Window.alert(e.toString()); } } else { } } private String validateIntegerTextBox(TextBox tb, String fieldName) { String msg = new String(""); if (tb.getText() == "" || tb.getText() == null) { msg += _("Please specify %s.").replace("%s", fieldName) + "\n"; } else if (!Util.isNumber(tb.getText())) { msg += "The specified valued for " + fieldName + " is not correct Number" + "\n"; } return msg; } public void printShortPatientReceipt() { ArrayList<String> params = new ArrayList<String>(); params.add("" + patientId); Util.callModuleMethod("PaymentModule", "getLastRecord", params, new CustomRequestCallback() { @Override public void onError() { } @SuppressWarnings("unchecked") @Override public void jsonifiedData(Object data) { if (data != null) { HashMap<String, String> result = (HashMap<String, String>) data; if (result != null) { List<String> reportParams = new ArrayList<String>(); reportParams.add(result.get("id")); reportParams.add("1"); Util.generateReportToPrinter("Patient Receipt Short", "pdf", reportParams); } } } }, "HashMap<String,String>"); } }