Project

General

Profile

1
package eu.dnetlib.client.accountingmonitor;
2

    
3
import com.github.gwtbootstrap.client.ui.*;
4
import com.github.gwtbootstrap.client.ui.Button;
5
import com.github.gwtbootstrap.client.ui.constants.AlertType;
6
import com.github.gwtbootstrap.client.ui.constants.AlternateSize;
7
import com.github.gwtbootstrap.client.ui.constants.ButtonType;
8
import com.github.gwtbootstrap.client.ui.constants.FormType;
9
import com.github.gwtbootstrap.datepicker.client.ui.DateBox;
10
import com.google.gwt.core.client.GWT;
11
import com.google.gwt.event.dom.client.ClickEvent;
12
import com.google.gwt.event.dom.client.ClickHandler;
13
import com.google.gwt.user.client.ui.*;
14
import com.google.gwt.user.client.ui.FileUpload;
15
import com.google.gwt.user.client.ui.Label;
16
import eu.dnetlib.client.widgets.FormFieldSet;
17
import eu.dnetlib.client.widgets.TextBox;
18

    
19
/**
20
 * Created by stefania on 7/8/15.
21
 */
22
public class BankTransferForm implements IsWidget {
23

    
24
    private FlowPanel bankTransferPanel = new FlowPanel();
25
    private Label bankTransferLabel = new Label();
26

    
27
    private Alert errorAlert = new Alert();
28

    
29
    private Form bankTransferForm = new Form();
30

    
31
    private DateBox dateOfTransfer = new DateBox();
32
    private TextBox apcPaid = new TextBox();
33
    private Label apcPaidCurrency = new Label();
34
    private TextBox transferCosts = new TextBox();
35
    private Label transferCostsCurrency = new Label();
36
    private TextBox otherExpenses = new TextBox();
37
    private Label otherExpensesCurrency = new Label();
38
    private FileUpload fileUpload = new FileUpload();
39

    
40
    private TextBox requestIdHidden = new TextBox();
41
    private TextBox commentHidden = new TextBox();
42

    
43
    private Button submit = new Button("Submit");
44
    private Button cancel = new Button("Cancel");
45

    
46
    private HTML loadingWheel = new HTML("<div class=\"loader-big\"></div><div class=\"whiteFilm\"></div>");
47

    
48
    private UploadCompleteListener uploadCompleteListener;
49
    private CancelListener cancelListener;
50

    
51
    public BankTransferForm(String requestId, String comment) {
52

    
53
        bankTransferPanel.addStyleName("bankTransferPanel");
54

    
55
        bankTransferLabel.setText("Complete the bank transfer info");
56
        bankTransferLabel.addStyleName("bankTransferLabel");
57

    
58
        errorAlert.addStyleName("alertLabel");
59
        errorAlert.setType(AlertType.ERROR);
60
        errorAlert.setVisible(false);
61
        errorAlert.setClose(false);
62

    
63
        bankTransferPanel.add(bankTransferLabel);
64
        bankTransferPanel.add(errorAlert);
65

    
66
        bankTransferForm.setType(FormType.HORIZONTAL);
67
        bankTransferForm.setAction(GWT.getModuleBaseURL() + "bankTransfer");
68
        bankTransferForm.setEncoding(FormPanel.ENCODING_MULTIPART);
69
        bankTransferForm.setMethod(FormPanel.METHOD_POST);
70

    
71
        bankTransferPanel.add(bankTransferForm);
72

    
73
        dateOfTransfer.setAlternateSize(AlternateSize.XLARGE);
74
        dateOfTransfer.setName("dateOfTransfer");
75
        dateOfTransfer.setFormat("yyyy/mm/dd");
76
        bankTransferForm.add(new FormFieldSet("Date of transfer (*)", dateOfTransfer));
77

    
78
        apcPaid.setAlternateSize(AlternateSize.XLARGE);
79
        apcPaid.setName("apcPaid");
80
        apcPaid.addStyleName("inlineBlock");
81
        apcPaidCurrency.setText(" Euro");
82
        apcPaidCurrency.addStyleName("inlineBlock");
83
        bankTransferForm.add(new FormFieldSet("APC Paid (*)", apcPaid, apcPaidCurrency));
84

    
85
        transferCosts.setAlternateSize(AlternateSize.XLARGE);
86
        transferCosts.setName("transferCosts");
87
        transferCosts.addStyleName("inlineBlock");
88
        transferCostsCurrency.setText(" Euro");
89
        transferCostsCurrency.addStyleName("inlineBlock");
90
        bankTransferForm.add(new FormFieldSet("Transfer costs (*)", transferCosts, transferCostsCurrency));
91

    
92
        otherExpenses.setAlternateSize(AlternateSize.XLARGE);
93
        otherExpenses.setName("otherExpenses");
94
        otherExpenses.addStyleName("inlineBlock");
95
        otherExpensesCurrency.setText(" Euro");
96
        otherExpensesCurrency.addStyleName("inlineBlock");
97
        bankTransferForm.add(new FormFieldSet("Other expenses", otherExpenses, otherExpensesCurrency));
98

    
99
        fileUpload.setName("bankTransferFile");
100
        bankTransferForm.add(new FormFieldSet("Bank Transfer File (*)", fileUpload));
101

    
102
        submit.setType(ButtonType.PRIMARY);
103
        submit.addStyleName("inlineBlock");
104
        submit.addClickHandler(new ClickHandler() {
105
            @Override
106
            public void onClick(ClickEvent clickEvent) {
107

    
108
                errorAlert.setVisible(false);
109

    
110
                if(apcPaid.getValue()!=null && !apcPaid.getValue().trim().equals("")
111
                        && transferCosts.getValue()!=null && !transferCosts.getValue().trim().equals("")
112
                        && fileUpload.getFilename()!=null && !fileUpload.getFilename().equals("")) {
113

    
114
                    boolean isValid;
115

    
116
                    if(isFloat(apcPaid.getValue().trim()) && isPositiveNumber(Float.parseFloat(apcPaid.getValue().trim()))
117
                            && isFloat(transferCosts.getValue().trim()) && isPositiveNumber(Float.parseFloat(transferCosts.getValue().trim()))) {
118
                        isValid = true;
119
                    } else {
120
                        isValid = false;
121
                    }
122

    
123
                    if(otherExpenses.getValue()!=null && !otherExpenses.getValue().equals("")
124
                            && (!isFloat(otherExpenses.getValue().trim()) || !isPositiveNumber(Float.parseFloat(otherExpenses.getValue().trim())))) {
125
                        isValid = false;
126
                    }
127

    
128
                    if(isValid) {
129
                        bankTransferPanel.addStyleName("loading");
130
                        bankTransferPanel.add(loadingWheel);
131
                        bankTransferForm.submit();
132
                    } else {
133
                        errorAlert.setText("APC paid, transfer costs and extra expenses must be positive numbers");
134
                        errorAlert.setVisible(true);
135
                    }
136
                } else {
137
                    errorAlert.setText("All asterisk (*) fields are required");
138
                    errorAlert.setVisible(true);
139
                }
140
            }
141
        });
142

    
143
        cancel.setType(ButtonType.DEFAULT);
144
        cancel.addStyleName("inlineBlock");
145
        cancel.addClickHandler(new ClickHandler() {
146
            @Override
147
            public void onClick(ClickEvent clickEvent) {
148
                if(cancelListener!=null)
149
                    cancelListener.cancel();
150
            }
151
        });
152

    
153
        bankTransferForm.add(new FormFieldSet(null, submit, cancel));
154

    
155
        requestIdHidden.setVisible(false);
156
        requestIdHidden.setName("requestId");
157
        requestIdHidden.setValue(requestId);
158
        bankTransferForm.add(new FormFieldSet(null, requestIdHidden));
159

    
160
        commentHidden.setVisible(false);
161
        commentHidden.setName("comment");
162
        commentHidden.setValue(comment);
163
        bankTransferForm.add(new FormFieldSet(null, commentHidden));
164

    
165
        bankTransferForm.addSubmitCompleteHandler(new Form.SubmitCompleteHandler() {
166
            @Override
167
            public void onSubmitComplete(Form.SubmitCompleteEvent submitCompleteEvent) {
168

    
169
                if(uploadCompleteListener!=null)
170
                    uploadCompleteListener.uploadCompleted(true);
171
            }
172
        });
173
    }
174

    
175
    @Override
176
    public Widget asWidget() {
177
        return bankTransferPanel;
178
    }
179

    
180
    public interface UploadCompleteListener {
181
        void uploadCompleted(boolean succeeded);
182
    }
183

    
184
    public void setUploadCompleteListener(UploadCompleteListener uploadCompleteListener) {
185
        this.uploadCompleteListener = uploadCompleteListener;
186
    }
187

    
188
    public interface CancelListener {
189
        void cancel();
190
    }
191

    
192
    public void setCancelListener(CancelListener cancelListener) {
193
        this.cancelListener = cancelListener;
194
    }
195

    
196
    private boolean isFloat(String number) {
197

    
198
        try {
199
            Float numberValue = Float.parseFloat(number);
200
            return true;
201
        } catch(NumberFormatException nfe) {
202
            return false;
203
        }
204
    }
205

    
206
    private boolean isPositiveNumber(float number) {
207

    
208
        if(number>=0)
209
            return true;
210

    
211
        return false;
212
    }
213
}
(5-5/5)