"4.0.02 Release Documentation"
Documented By : S.Srinath
Date: March 25 2011
Bug # 557
Email Settings in POS Application
In the current POS does not have "email settings" in pos database.
When ever customer is selected in the sales transaction and process sale, pos application will connect to the CAS app and get the email configuration details.
If we have email settings table at local then pos will refer from local database only.
Email settings is one time configuration settings and there is no frequent modifications on this. So when user configure email settings on CAS then it should be pushed to POS.
When the POS is off line the Go Green function does not send the customer an email receipt not does it save a message to sent the customer's receipt once on line.
The application should store the messages and transmit them once connectivity is restored. These requests should be part of the backup as should all pending messages for that matter
Change Of Requirement:
When we do the Sales Transaction and customer's opts to send the receipt by e-mail. And in case POS is in off line, it should show the pop-up message saying "Network Connection Unavailable ...". On click on OK button it will print the receipt.
Approach To The Requirement:
Initial Running of POS application, Email Settings gets configured / Initialized when POS is on-line. It is for one time, till POS application gets restarted.
When customer's opts for Go-green option, by sending the receipt by E-mail. It gets Email Settings from the
configured/ Initialized object and we send the mail using pre-defined methods in javax.mail package.
I have added two conditions, before processing of mail message and one more before sending the mail through
network. The condition such as..
1. the Email Settings is configured/Initialized or not. If not (it means, the POS is off-line while starting of the
POS application not get initialized/configured) the mail message will not be created, it will show the pop-up message saying "Network Connection Unavailable..." and click on OK button, it will print the receipt.
2. if the email settings are configured/initialized and mail message is created. During the transmission of mail, if the network is off-line, an exception is raised. We catch the exception and we show the pop-up message saying "Network Connection Unavailable ..." and click on OK button, it will print the receipt.
Bug # 585
Non Alignment in Store Orders and Merchandise Transfer transactions in POS
While printing Store Order Print Receipt, quantity value is not aligned properly where it was not printing Quantity column.
That should be aligned properly, so that prints under Quantity column in receipt. The Quantity total value was printing
in decimal number format, it should be in whole number format.
And in Transfer / Receive Print Receipt, the Venue and Event was printing along with the Date field in a same line.
Where both Venue and Event field value should be printed in a separate line.
For Store Order Print Receipt, I have aligned by adding the tab escape operator. So that it prints it under the Quantity
column. In order to print the total quantity value in whole number format. I have used DecimalFormat class defined
in java.text package.
For Transfer/Receive print receipt. At POS application, we will send the a XML request to the CAS. Where it process it
and returns the processed message to print at POS level specific to the merchant. While processing the message to print
there itself I have changed the format by adding a new break up line so that both Venue and Event prints in a new line.
At POS Application level, we take the response which gives the Processed Receipt as a message, we print it at POS
JFrameSTOCreate.java in POS application.
ExternalRequestProcessor.java in CAS application.
Bug # 606
Sales Performance pending issues.
1.When cashier performing split tender transactions like cash+CC/Cash+Gift/Gift+CC/CC+Gift/cash+Gift+CC/cash+CC+Gift when POS application perming processing CC/Gift card POS screen becomes complete white and comes to normal UI after printing merchant copy.
2.When POS application navigating to next screen in split tender application is getting minimized and maximized. Even though it is taking very less time it is not look good at user point of view.
Issue in existing code:
calling of components in a page was not called in an order, it means they after calling the page then are initializing the
components in the page.
For each page calling, they have used system thread to get the graphic settings of POS system (which in turn returns with the current graphic settings of the POS system) and they initialize the GraphicDevice class object of java.awt package which they are using in the application. As it is a system thread, the thread priority is given high and gets processed first. Then the set the screen (Frame) visible to true and after that, they initialize the components of that page. Till it gets initialized, the screen(Frame) is shown blank ("White-screen").
Solution for not displaying blank(White-screen) screen(Frame):
Not setting the GraphicDevice object every time we call a new screen. Calling the new screen (Frame) by first initializing the components of that page and setting the visible of the screen to true. Till then it will be in the old (existing) screen (Frame).
Need to check in all the files of the POS application.
Enhancement # 831
Payment Settings-Creating Payment Settings at POS level.
After RedFin integration User is not able to create the Payment settings at POS level.
URL for payment type were added in the CAS whitelist table.
In the current build hard coded URLS are removed that's why user is not able to create the payment settings at POS.
If there is not settings at POS and user want to create the payment settings then after selecting the payment gateway POS should get the corresponding URL from CAS whitelist table and save the details to POS db.
Currently for A.N emulation and ZIVO URLS are exist.
PC CHARGE there is no URL and user can save directly.
In CAS database, we maintain URL with respective to the Payment gateway in WhiteList table. So, at CAS application
level I have implemented code to get all the records of WhiteList table by executing select query. Storing the result in a list and sending the information in an XML format, when the XML request comes from the POS application level.
In POS application level, we create a payment gateway setting and insert into local POS database if payment gateway setting is not available in POS database.
Basing on payment gateway selection, we will set the URL path with a value from the list of URL values specific to the
payment gateway. (Constraint is payment gateway what we have selected should match with payment gateway in the list.)
Then we will insert into the database tables.
ExternalRequestProcessor.java at CAS level
JFramePaymentGateway.java at POS level
ExternalRequestProcessor.java at POS level
Database Tables Used:
Bug # 833
Customer modifications gives error
When user modifies customer at the POS, the error message is irrelevant and does not allow user to modify
1.Its says zip code should be 5 digits (which is not a mandatory field)
2.Linked customers cannot be same
These 2 messages cannot appear when modification is made, like
1. zip code is invalid (where zip code is not mandatory field),
2. linked customer's cannot be same (where linked customer's is not mandatory field).
Initially the code was written in a such way that if the zip code value is available in database they is to display the value in the corresponding field or else they is to insert default value "0" (zero). So when we click on submit or save button, validations message is displayed saying wrong zip code value. Similarly in case of linked customer's field if the value exist in the database it will be displayed in the corresponding field. When we click on submit / save button, they have written condition in such a way that both the field (linked customer1 & linked customer2) having same value no matter null or blank or having data, validation message should be displayed.
I changed the code, where if the zip code data is available in database it will be displayed. If not it will be left blank. Similarly with the linked customer's field value available in database shown in the corresponding field, or else blank will be inserted. And the condition written for showing the validation message is changed it will check with the values in the field not with null or blank values.
Unit Tested by
- Creating the customer at POS application level and after that doing modification to the existing customer's.
- Creating the customer at CAS application level and modification at POS application level.
Here modification in customer screen such as by not entering in non-mandatory fields & also with mandatory fields. Entering wrong values in corresponding fields. Tested with negative scenario's.
Enhancement # 521
Return Validation Option
To allow management level users to requ1re that all returns have to be validated against a valid receipt.
This setting should be able to be done on the CAS and modified at a Venue or Store level, it should also be able to be modified/set at a POS level. Access should be granted to only those with rights to modify POS settings currently.
In the event that a cashier is processing a transaction that is not verified, a pop up box should be displayed that will allow the user to get a supervisor override (Supervisor, ASM, SM).
Operational Issue: what happens when a return is being processed at a POS that is different from the originating one?
Initially the code was not checking or preventing the end user to do refund sales with verification. Where an end user can do refund transaction with out verification.
They came with an requirement saying by default ASM & SM ( Assistant Store Manager & Store Manager) will have access to do refund sales with verification or with out verification by checking or un-checking Verify check box in Exchange Sale screen (Frame).
For others, by default it will be checked in Verify check box in Exchange Sale screen. If they want to do refund sales without verification it should ask for authentication where we give store manager authentication details, and continue refund transaction.
For Verify Check box in Exchange Sale screen (Frame) we have defined FunctionId called "RefundVerification".
I started with executing the insert statement in Function table manually (executing at MySQL command prompt) at CAS database for inserting a new functionId.
Three insert statements are used to insert record into AccessRights table at CAS database where we give full access permission to the users who is having the following roles Central Admin, System Admin, Finance on the newly created Function Id ("Refund Verification").
Two insert statements are used to insert record into AccessRights table at Merchant Database where we give full access permission to the users who is having the following roles Store Manager, Assistant Store Manager on the newly created Function Id ("Refund Verification").
At POS application, basing on role the user logged in the Verify Check box will shown in editable format. By default the verify check box will be selected.
For example, if user logs with Store Manager / Assistant Store Manager role, the verify check box will be in editable format where he can Refund sales with or without verification.
If user logs with other than Store Manager / Assistant Store Manager, the verify check box will not in editable format, and by default it will be selected. If the user wants to Refund Sales without verification on click on the Verify Check box, one pop up window is displayed asking for Store Manager Authentication. Then the user has the option to do Refund Sales without verification.
Enhancement # 771
Java Processing Running in the Background
Occasionally when you close the POS Application and double-click the desktop icon to open it again, nothing happens except the black box (Echo Off) appears and disappears and you are not able to get to the login screen. The walk around we do is opening Task Manager and selecting the Process Tab, then selecting the "javaw.exe" process and ending it. Once that clears out we are able to run the POS Application and be able to get to the login screen.
When we are running the POS Application, in the Operating System level it will start one process called "javaw" process it means one more thread is added to the existing system resources. In few scenarios the process / Thread will not get killed even after closing of POS Application as the system has its own priority list for all the thread process basing on that it kills / Ends the process (Thread).
What I have done is, on closing of POS Application I have used java.lang.Process Class and implemented in the following way,
Process process=Runtime.getRuntime ().exec ("taskkill /IM javaw.exe");
process. destroy ();
In order to get javaw process object using Runtime.getRuntime ().exec ("taskkill / IM javaw.exe"). It returns subprocess object for "javaw.exe" and it is initialized to Process object.
To kill the subprocess, we should call pre-defined method destroy (). This will kill the subprocess.
Enhancement # 809
Non Alignment in receipt
The decimal point in the receipt is not aligned. Some price have 10.00 and some have 10.0
This has be to rectified in receipts and UI (reports, sales etc) so that all places have 10.00 with 2 decimal points
The values that are getting printed for tax, coupon, change, sub-total and remaining fields in the receipt are double value which are not formatted it was showing the result after calculation.
In java.text package we have DecimalFormat class where we give user-defined format to display the value in what format to print / display.
Enhancement # 827
Alphabetizing the drop downs in POS
All the drop downs for coupons, discounts, department, category, sub category, style, color etc should be alphabetized.
The list of values retrieved from the database is stored in the format of Hash Map (key, value) pair where I am converting the key value into Uppercase and storing it.
The list of values which are assigned to the hashmap, I have created an Set object using TreeSet Constructor.
Using Set object reference calling addAll method to add all the contents of the Key values of the HashMap using keySet() method. These sorts in an alphabetical order.
This hashmap value is set to the combo box component which is used in the UI screen / Frame.
Enhancement # 838
Quick return of Transaction
To allow a user to reverse a transaction without ringing each item in a transaction. Once the transaction is referenced as a return the user can either return one at a time or have the entire transaction displayed.
A discussion should occur to determine what makes the most design sense
In Exchange Sale Screen, for Transaction ID alpha numeric keypad is displayed on mouse click. Basing on the selection of
TransactionId, and pressing ENTER button it will ask an option by showing a pop up message "Do you want to show all the items of the receipt?" on click on YES button it will give all the items for that transaction in --ve value as it is a refund sale.
And after that we do refund transaction with available paymodes.
On Click of NO button, it will do normal way of Refund Transaction.