Commit bd2e1ed6 authored by vvengurlekar's avatar vvengurlekar

PayarrToProc.java - functionality added to check period code lesser than...

PayarrToProc.java - functionality added to check period code lesser than joining date , process type is editable


git-svn-id: http://15.206.35.175/svn/proteus/business-java/trunk@192660 ce508802-f39f-4f6c-b175-0d175dae99d5
parent a63a94fd
...@@ -75,14 +75,14 @@ public class PayarrToProc extends ValidatorEJB implements PayarrToProcLocal,Paya ...@@ -75,14 +75,14 @@ public class PayarrToProc extends ValidatorEJB implements PayarrToProcLocal,Paya
String childNodeName = ""; String childNodeName = "";
String errString=""; String errString="";
String userId = "", errCode = "", errorType = "", loginCode = ""; String userId = "", errCode = "", errorType = "", loginCode = "";
String msgType = "";//Modified by Ahmed on 31-AUG-2018[To break and return error message when validation fails]
ArrayList<String> errList = new ArrayList<String>(); ArrayList<String> errList = new ArrayList<String>();
ArrayList<String> errFields = new ArrayList<String>(); ArrayList<String> errFields = new ArrayList<String>();
StringBuffer errStringXml = new StringBuffer("<?xml version = \"1.0\"?> \r\n <Root> <Errors>"); StringBuffer errStringXml = new StringBuffer("<?xml version = \"1.0\"?> \r\n <Root> <Errors>");
String sql = ""; String sql = "";
String empCode = "", status = "", prdCode = "", procType = "", paySite = ""; String empCode = "", status = "", prdCode = "", procType = "", paySite = "";
String msgType = "";//Modified by Ahmed on 31-AUG-2018[To break and return error message when validation fails]
int userLevel = 0; int userLevel = 0;
Date fromDate = null, relieveDate = null; Date fromDate = null, relieveDate = null, toDate = null, joinDate = null;
try try
{ {
conn = getConnection(); conn = getConnection();
...@@ -110,86 +110,33 @@ public class PayarrToProc extends ValidatorEJB implements PayarrToProcLocal,Paya ...@@ -110,86 +110,33 @@ public class PayarrToProc extends ValidatorEJB implements PayarrToProcLocal,Paya
if("emp_code".equalsIgnoreCase(childNodeName)) if("emp_code".equalsIgnoreCase(childNodeName))
{ {
empCode = checkNull(genericUtility.getColumnValue("emp_code", dom)); empCode = checkNull(genericUtility.getColumnValue("emp_code", dom));
if(empCode == null || empCode.trim().length() == 0)
if(empCode != null && empCode.trim().length() > 0)
{ {
cnt = 0; errCode = "VTPAYARR04";
sql = "select status, pay_site from employee where emp_code = ?"; errList.add(errCode);
pstmt = conn.prepareStatement(sql); errFields.add(childNodeName.toLowerCase());
pstmt.setString(1, empCode); //Modified by Ahmed on 31-AUG-2018[To break and return error message when validation fails]start
rs = pstmt.executeQuery(); msgType = errorType(conn, errCode);
if(rs.next()) if (msgType.equalsIgnoreCase("E"))
{
status = checkNull(rs.getString("status"));
paySite = checkNull(rs.getString("pay_site"));
cnt++;
}
if(rs != null)
{
rs.close();
rs = null;
}
if(pstmt != null)
{
pstmt.close();
pstmt = null;
}
if(cnt == 0)
{
errCode = "VTPAYARR04";
errList.add(errCode);
errFields.add(childNodeName.toLowerCase());
//Modified by Ahmed on 31-AUG-2018[To break and return error message when validation fails]start
msgType = errorType(conn, errCode);
if (msgType.equalsIgnoreCase("E"))
{
break;
}
//Modified by Ahmed on 31-AUG-2018[To break and return error message when validation fails]end
}
if(status.equalsIgnoreCase("S"))
{
errCode = "VTPAYARR01";
errList.add(errCode);
errFields.add(childNodeName.toLowerCase());
//Modified by Ahmed on 31-AUG-2018[To break and return error message when validation fails]start
msgType = errorType(conn, errCode);
if (msgType.equalsIgnoreCase("E"))
{
break;
}
//Modified by Ahmed on 31-AUG-2018[To break and return error message when validation fails]end
}
sql = "select usr_lev from users where code = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, loginCode);
rs = pstmt.executeQuery();
if(rs.next())
{
userLevel = rs.getInt("usr_lev");
}
if(rs != null)
{
rs.close();
rs = null;
}
if(pstmt != null)
{ {
pstmt.close(); break;
pstmt = null;
} }
if(userLevel > 1) //Modified by Ahmed on 31-AUG-2018[To break and return error message when validation fails]end
}
else if("A".equalsIgnoreCase(editFlag))// added condition by varsha V to execute validation on add mode 02-11-18
{
if(empCode != null && empCode.trim().length() > 0)
{ {
cnt = 0; cnt = 0;
sql = "select count(*) as cnt from user_site where user_id = ? and site_code = ?"; sql = "select status, pay_site from employee where emp_code = ?";
pstmt = conn.prepareStatement(sql); pstmt = conn.prepareStatement(sql);
pstmt.setString(1, loginCode); pstmt.setString(1, empCode);
pstmt.setString(2, paySite);
rs = pstmt.executeQuery(); rs = pstmt.executeQuery();
if(rs.next()) if(rs.next())
{ {
cnt = rs.getInt("cnt"); status = checkNull(rs.getString("status"));
paySite = checkNull(rs.getString("pay_site"));
cnt++;
} }
if(rs != null) if(rs != null)
{ {
...@@ -201,10 +148,22 @@ public class PayarrToProc extends ValidatorEJB implements PayarrToProcLocal,Paya ...@@ -201,10 +148,22 @@ public class PayarrToProc extends ValidatorEJB implements PayarrToProcLocal,Paya
pstmt.close(); pstmt.close();
pstmt = null; pstmt = null;
} }
if(cnt == 0)
if(cnt <= 0) {
errCode = "VTPAYARR04";
errList.add(errCode);
errFields.add(childNodeName.toLowerCase());
//Modified by Ahmed on 31-AUG-2018[To break and return error message when validation fails]start
msgType = errorType(conn, errCode);
if (msgType.equalsIgnoreCase("E"))
{
break;
}
//Modified by Ahmed on 31-AUG-2018[To break and return error message when validation fails]end
}
if(status.equalsIgnoreCase("S"))
{ {
errCode = "VTPAYARR06"; errCode = "VTPAYARR01";
errList.add(errCode); errList.add(errCode);
errFields.add(childNodeName.toLowerCase()); errFields.add(childNodeName.toLowerCase());
//Modified by Ahmed on 31-AUG-2018[To break and return error message when validation fails]start //Modified by Ahmed on 31-AUG-2018[To break and return error message when validation fails]start
...@@ -215,11 +174,73 @@ public class PayarrToProc extends ValidatorEJB implements PayarrToProcLocal,Paya ...@@ -215,11 +174,73 @@ public class PayarrToProc extends ValidatorEJB implements PayarrToProcLocal,Paya
} }
//Modified by Ahmed on 31-AUG-2018[To break and return error message when validation fails]end //Modified by Ahmed on 31-AUG-2018[To break and return error message when validation fails]end
} }
sql = "select usr_lev from users where code = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, loginCode);
rs = pstmt.executeQuery();
if(rs.next())
{
userLevel = rs.getInt("usr_lev");
}
if(rs != null)
{
rs.close();
rs = null;
}
if(pstmt != null)
{
pstmt.close();
pstmt = null;
}
if(userLevel > 1)
{
cnt = 0;
sql = "select count(*) as cnt from user_site where user_id = ? and site_code = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, loginCode);
pstmt.setString(2, paySite);
rs = pstmt.executeQuery();
if(rs.next())
{
cnt = rs.getInt("cnt");
}
if(rs != null)
{
rs.close();
rs = null;
}
if(pstmt != null)
{
pstmt.close();
pstmt = null;
}
if(cnt <= 0)
{
errCode = "VTPAYARR06";
errList.add(errCode);
errFields.add(childNodeName.toLowerCase());
//Modified by Ahmed on 31-AUG-2018[To break and return error message when validation fails]start
msgType = errorType(conn, errCode);
if (msgType.equalsIgnoreCase("E"))
{
break;
}
//Modified by Ahmed on 31-AUG-2018[To break and return error message when validation fails]end
}
}
} }
} }
else
}
else if("prd_code".equalsIgnoreCase(childNodeName))
{
prdCode = checkNull(genericUtility.getColumnValue("prd_code", dom));
if(prdCode == null || prdCode.trim().length() == 0)
{ {
errCode = "VTPAYARR04"; errCode = "VTPAYARR05";
errList.add(errCode); errList.add(errCode);
errFields.add(childNodeName.toLowerCase()); errFields.add(childNodeName.toLowerCase());
//Modified by Ahmed on 31-AUG-2018[To break and return error message when validation fails]start //Modified by Ahmed on 31-AUG-2018[To break and return error message when validation fails]start
...@@ -230,22 +251,113 @@ public class PayarrToProc extends ValidatorEJB implements PayarrToProcLocal,Paya ...@@ -230,22 +251,113 @@ public class PayarrToProc extends ValidatorEJB implements PayarrToProcLocal,Paya
} }
//Modified by Ahmed on 31-AUG-2018[To break and return error message when validation fails]end //Modified by Ahmed on 31-AUG-2018[To break and return error message when validation fails]end
} }
} else if("A".equalsIgnoreCase(editFlag))
else if("prd_code".equalsIgnoreCase(childNodeName))
{
prdCode = checkNull(genericUtility.getColumnValue("prd_code", dom));
if(prdCode != null && prdCode.trim().length() > 0)
{ {
if(prdCode != null && prdCode.trim().length() > 0)
{
cnt = 0;
sql = "select fr_date, to_date from period where code = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, prdCode);
rs = pstmt.executeQuery();
if(rs.next())
{
fromDate = rs.getDate("fr_date");
toDate = rs.getDate("to_date");
cnt++;
}
if(rs != null)
{
rs.close();
rs = null;
}
if(pstmt != null)
{
pstmt.close();
pstmt = null;
}
if(cnt == 0)
{
errCode = "VTPAYARR05";
errList.add(errCode);
errFields.add(childNodeName.toLowerCase());
//Modified by Ahmed on 31-AUG-2018[To break and return error message when validation fails]start
msgType = errorType(conn, errCode);
if (msgType.equalsIgnoreCase("E"))
{
break;
}
//Modified by Ahmed on 31-AUG-2018[To break and return error message when validation fails]end
}
empCode = checkNull(genericUtility.getColumnValue("emp_code", dom));
sql = "select RELIEVE_DATE, DATE_JOIN from employee where EMP_CODE = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, empCode);
rs = pstmt.executeQuery();
if(rs.next())
{
relieveDate = rs.getDate("RELIEVE_DATE");
joinDate = rs.getDate("DATE_JOIN");
}
if(rs != null)
{
rs.close();
rs = null;
}
if(pstmt != null)
{
pstmt.close();
pstmt = null;
}
if(fromDate != null && relieveDate != null)
{
if(fromDate.after(relieveDate))
{
errCode = "VTPAYARR02";
errList.add(errCode);
errFields.add(childNodeName.toLowerCase());
//Modified by Ahmed on 31-AUG-2018[To break and return error message when validation fails]start
msgType = errorType(conn, errCode);
if (msgType.equalsIgnoreCase("E"))
{
break;
}
//Modified by Ahmed on 31-AUG-2018[To break and return error message when validation fails]end
}
}
//Added below code by Varsha V to check whether period code is before joining date or not 02-11-18
if(toDate != null && joinDate != null)
{
if(toDate.before(joinDate))
{
errCode = "VTPAYARR08";
errList.add(errCode);
errFields.add(childNodeName.toLowerCase());
//Modified by Ahmed on 31-AUG-2018[To break and return error message when validation fails]start
msgType = errorType(conn, errCode);
if (msgType.equalsIgnoreCase("E"))
{
break;
}
//Modified by Ahmed on 31-AUG-2018[To break and return error message when validation fails]end
}
}
//Ended below code by Varsha V to check whether period code is before joining date or not 02-11-18
}
procType = checkNull(genericUtility.getColumnValue("proc_type", dom));
cnt = 0; cnt = 0;
sql = "select fr_date from period where code = ?"; sql = "select count(*) as cnt from payarr_to_proc where EMP_CODE = ?"
+ " and prd_code = ? and proc_type = ? and (status is null or status = 'U')";
pstmt = conn.prepareStatement(sql); pstmt = conn.prepareStatement(sql);
pstmt.setString(1, prdCode); pstmt.setString(1, empCode);
pstmt.setString(2, prdCode);
pstmt.setString(3, procType);
rs = pstmt.executeQuery(); rs = pstmt.executeQuery();
if(rs.next()) if(rs.next())
{ {
fromDate = rs.getDate("fr_date"); cnt = rs.getInt("cnt");
cnt++;
} }
if(rs != null) if(rs != null)
{ {
...@@ -257,9 +369,9 @@ public class PayarrToProc extends ValidatorEJB implements PayarrToProcLocal,Paya ...@@ -257,9 +369,9 @@ public class PayarrToProc extends ValidatorEJB implements PayarrToProcLocal,Paya
pstmt.close(); pstmt.close();
pstmt = null; pstmt = null;
} }
if(cnt == 0) if(cnt > 0)
{ {
errCode = "VTPAYARR05"; errCode = "VTPAYARR03";
errList.add(errCode); errList.add(errCode);
errFields.add(childNodeName.toLowerCase()); errFields.add(childNodeName.toLowerCase());
//Modified by Ahmed on 31-AUG-2018[To break and return error message when validation fails]start //Modified by Ahmed on 31-AUG-2018[To break and return error message when validation fails]start
...@@ -270,71 +382,6 @@ public class PayarrToProc extends ValidatorEJB implements PayarrToProcLocal,Paya ...@@ -270,71 +382,6 @@ public class PayarrToProc extends ValidatorEJB implements PayarrToProcLocal,Paya
} }
//Modified by Ahmed on 31-AUG-2018[To break and return error message when validation fails]end //Modified by Ahmed on 31-AUG-2018[To break and return error message when validation fails]end
} }
empCode = checkNull(genericUtility.getColumnValue("emp_code", dom));
sql = "select RELIEVE_DATE from employee where EMP_CODE = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, empCode);
rs = pstmt.executeQuery();
if(rs.next())
{
relieveDate = rs.getDate("RELIEVE_DATE");
}
if(rs != null)
{
rs.close();
rs = null;
}
if(pstmt != null)
{
pstmt.close();
pstmt = null;
}
if(fromDate != null && relieveDate != null)
{
if(fromDate.after(relieveDate))
{
errCode = "VTPAYARR02";
errList.add(errCode);
errFields.add(childNodeName.toLowerCase());
}
}
}
else
{
errCode = "VTPAYARR05";
errList.add(errCode);
errFields.add(childNodeName.toLowerCase());
}
procType = checkNull(genericUtility.getColumnValue("proc_type", dom));
cnt = 0;
sql = "select count(*) as cnt from payarr_to_proc where EMP_CODE = ?"
+ " and prd_code = ? and proc_type = ? and (status is null or status = 'U')";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, empCode);
pstmt.setString(2, prdCode);
pstmt.setString(3, procType);
rs = pstmt.executeQuery();
if(rs.next())
{
cnt = rs.getInt("cnt");
}
if(rs != null)
{
rs.close();
rs = null;
}
if(pstmt != null)
{
pstmt.close();
pstmt = null;
}
if(cnt > 0)
{
errCode = "VTPAYARR03";
errList.add(errCode);
errFields.add(childNodeName.toLowerCase());
} }
} }
} }
...@@ -478,7 +525,8 @@ public class PayarrToProc extends ValidatorEJB implements PayarrToProcLocal,Paya ...@@ -478,7 +525,8 @@ public class PayarrToProc extends ValidatorEJB implements PayarrToProcLocal,Paya
String descr=""; String descr="";
String procType=""; String procType="";
String tranId=""; String tranId="";
String empName = ""; String empName = "", paySite = "", loginCode = "";
int userLevel = 0, cnt = 0;
PreparedStatement pstmt = null; PreparedStatement pstmt = null;
ResultSet rs = null; ResultSet rs = null;
String sql = ""; String sql = "";
...@@ -487,7 +535,8 @@ public class PayarrToProc extends ValidatorEJB implements PayarrToProcLocal,Paya ...@@ -487,7 +535,8 @@ public class PayarrToProc extends ValidatorEJB implements PayarrToProcLocal,Paya
try try
{ {
conn = getConnection(); conn = getConnection();
chgUser = checkNull(genericUtility.getValueFromXTRA_PARAMS(xtraParams, "userId")); chgUser = checkNull(genericUtility.getValueFromXTRA_PARAMS(xtraParams, "userId"));
loginCode = genericUtility.getValueFromXTRA_PARAMS(xtraParams, "loginCode");
chgTerm = getValueFromXTRA_PARAMS(xtraParams, "termId"); chgTerm = getValueFromXTRA_PARAMS(xtraParams, "termId");
java.util.Date currDate = new java.util.Date(); java.util.Date currDate = new java.util.Date();
SimpleDateFormat sdf = new SimpleDateFormat(genericUtility.getApplDateFormat()); SimpleDateFormat sdf = new SimpleDateFormat(genericUtility.getApplDateFormat());
...@@ -517,7 +566,7 @@ public class PayarrToProc extends ValidatorEJB implements PayarrToProcLocal,Paya ...@@ -517,7 +566,7 @@ public class PayarrToProc extends ValidatorEJB implements PayarrToProcLocal,Paya
xmlString.append("<status protect=\"1\"><![CDATA[").append("U").append("]]></status>\r\n"); xmlString.append("<status protect=\"1\"><![CDATA[").append("U").append("]]></status>\r\n");
xmlString.append("<prd_code__acc protect=\"1\"><![CDATA[").append("").append("]]></prd_code__acc>\r\n"); xmlString.append("<prd_code__acc protect=\"1\"><![CDATA[").append("").append("]]></prd_code__acc>\r\n");
xmlString.append("<proc_date protect=\"1\"><![CDATA[").append("").append("]]></proc_date>\r\n"); xmlString.append("<proc_date protect=\"1\"><![CDATA[").append("").append("]]></proc_date>\r\n");
xmlString.append("<proc_type protect=\"1\"><![CDATA[").append("PY").append("]]></proc_type>\r\n"); xmlString.append("<proc_type protect=\"0\"><![CDATA[").append("PY").append("]]></proc_type>\r\n");
xmlString.append("<tran_id protect=\"1\"><![CDATA[").append("").append("]]></tran_id>\r\n"); xmlString.append("<tran_id protect=\"1\"><![CDATA[").append("").append("]]></tran_id>\r\n");
}//Ended itm_default itemchange by Varsha V on 24-08-18 [END] }//Ended itm_default itemchange by Varsha V on 24-08-18 [END]
...@@ -562,10 +611,10 @@ public class PayarrToProc extends ValidatorEJB implements PayarrToProcLocal,Paya ...@@ -562,10 +611,10 @@ public class PayarrToProc extends ValidatorEJB implements PayarrToProcLocal,Paya
else if (currentColumn.trim().equalsIgnoreCase("emp_code")) else if (currentColumn.trim().equalsIgnoreCase("emp_code"))
{ {
empCode = checkNull(genericUtility.getColumnValue("emp_code", dom)); empCode = checkNull(genericUtility.getColumnValue("emp_code", dom));
site = ""; empName = ""; site = ""; empName = ""; paySite = "";
if(empCode != null && empCode.trim().length() > 0) if(empCode != null && empCode.trim().length() > 0)
{ {
sql = "SELECT EMP_SITE, FN_GET_EMP_NAME( EMP_CODE,'X')AS EMP_NAME FROM EMPLOYEE WHERE EMP_CODE= ?"; sql = "SELECT EMP_SITE, FN_GET_EMP_NAME( EMP_CODE,'X')AS EMP_NAME, PAY_SITE FROM EMPLOYEE WHERE EMP_CODE= ?";
pstmt = conn.prepareStatement(sql); pstmt = conn.prepareStatement(sql);
pstmt.setString(1, empCode); pstmt.setString(1, empCode);
rs = pstmt.executeQuery(); rs = pstmt.executeQuery();
...@@ -573,6 +622,26 @@ public class PayarrToProc extends ValidatorEJB implements PayarrToProcLocal,Paya ...@@ -573,6 +622,26 @@ public class PayarrToProc extends ValidatorEJB implements PayarrToProcLocal,Paya
{ {
site = checkNull(rs.getString("EMP_SITE")); site = checkNull(rs.getString("EMP_SITE"));
empName = checkNull(rs.getString("EMP_NAME")); empName = checkNull(rs.getString("EMP_NAME"));
paySite = checkNull(rs.getString("PAY_SITE"));
}
if(rs != null)
{
rs.close();
rs = null;
}
if(pstmt != null)
{
pstmt.close();
pstmt = null;
}
// addec below code by Varsha V to check user rights 02-11-18
sql = "select usr_lev from users where code = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, loginCode);
rs = pstmt.executeQuery();
if(rs.next())
{
userLevel = rs.getInt("usr_lev");
} }
if(rs != null) if(rs != null)
{ {
...@@ -584,6 +653,8 @@ public class PayarrToProc extends ValidatorEJB implements PayarrToProcLocal,Paya ...@@ -584,6 +653,8 @@ public class PayarrToProc extends ValidatorEJB implements PayarrToProcLocal,Paya
pstmt.close(); pstmt.close();
pstmt = null; pstmt = null;
} }
// Ended below code by Varsha V to check user rights 02-11-18
siteDescr = "";
if(site.trim().length() > 0 && !"null".equalsIgnoreCase(site) ) if(site.trim().length() > 0 && !"null".equalsIgnoreCase(site) )
{ {
sql = "SELECT DESCR FROM SITE WHERE SITE_CODE = ? "; sql = "SELECT DESCR FROM SITE WHERE SITE_CODE = ? ";
...@@ -609,10 +680,50 @@ public class PayarrToProc extends ValidatorEJB implements PayarrToProcLocal,Paya ...@@ -609,10 +680,50 @@ public class PayarrToProc extends ValidatorEJB implements PayarrToProcLocal,Paya
} }
} }
} }
xmlString.append("<name><![CDATA[").append(empName).append("]]></name>\r\n"); // addec below code by Varsha V to check user rights on 02-11-18
xmlString.append("<site><![CDATA[").append(site).append("]]></site>\r\n"); if(userLevel > 1)
xmlString.append("<descr><![CDATA[").append(siteDescr).append("]]></descr>\r\n"); {
cnt = 0;
sql = "select count(*) as cnt from user_site where user_id = ? and site_code = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, loginCode);
pstmt.setString(2, paySite);
rs = pstmt.executeQuery();
if(rs.next())
{
cnt = rs.getInt("cnt");
}
if(rs != null)
{
rs.close();
rs = null;
}
if(pstmt != null)
{
pstmt.close();
pstmt = null;
}
if(cnt > 0)
{
xmlString.append("<name><![CDATA[").append(empName).append("]]></name>\r\n");
xmlString.append("<site><![CDATA[").append(site).append("]]></site>\r\n");
xmlString.append("<descr><![CDATA[").append(siteDescr).append("]]></descr>\r\n");
}
else
{
xmlString.append("<name><![CDATA[").append("").append("]]></name>\r\n");
xmlString.append("<site><![CDATA[").append("").append("]]></site>\r\n");
xmlString.append("<descr><![CDATA[").append("").append("]]></descr>\r\n");
}
}
else
{
xmlString.append("<name><![CDATA[").append(empName).append("]]></name>\r\n");
xmlString.append("<site><![CDATA[").append(site).append("]]></site>\r\n");
xmlString.append("<descr><![CDATA[").append(siteDescr).append("]]></descr>\r\n");
}
// Ended below code by Varsha V to check user rights 02-11-18
} }
//Ended emp_code itemchange by Varsha V on 24-08-18 [End] //Ended emp_code itemchange by Varsha V on 24-08-18 [End]
xmlString.append("</Detail1>\r\n"); xmlString.append("</Detail1>\r\n");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment