package realcix20.classes;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.SecureRandom;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Calendar;
import java.util.Iterator;
import java.util.StringTokenizer;
import java.util.Vector;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SealedObject;
import javax.crypto.SecretKey;
import realcix20.classes.basic.BaseClass;
import realcix20.classes.basic.Cell;
import realcix20.classes.basic.ClassManager;
import realcix20.classes.basic.Row;
import realcix20.classes.plugins.CixFile;
import realcix20.classes.plugins.RealCIXFile;
import realcix20.guis.listeners.MainListener;
import realcix20.guis.utils.DialogManager;
import realcix20.guis.utils.TimeManager;
import realcix20.guis.utils.TxtManager;
import realcix20.guis.views.ObjectEdit;
import realcix20.utils.DAO;
import realcix20.utils.ObjectUtil;
import realcix20.utils.Resources;
public class CorrespondenceClass extends BaseClass {
public CorrespondenceClass(int clsId) {
super(clsId);
}
public CorrespondenceClass(int clsId, boolean t) {
super(clsId, t);
}
public static boolean isCorrespondencePartnerBlocked(Row correspondenceRow) {
boolean result = false;
String ns = (String)ObjectUtil.findNewCell(correspondenceRow, "T", "NS").getColumnValue();
String p = (String)ObjectUtil.findNewCell(correspondenceRow, "T", "P").getColumnValue();
String pa = (String)ObjectUtil.findNewCell(correspondenceRow, "T", "PA").getColumnValue();
DAO dao = DAO.getInstance();
dao.query(Resources.GET_PA_SQL);
dao.setString(1, ns);
dao.setString(2, p);
dao.setString(3, pa);
ResultSet rs = dao.executeQuery();
try {
if (rs.next()) {
result = rs.getBoolean("BLOCK");
}
rs.close();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
public static void deleteRelativeRegs(Row correspondenceRow) {
CorrespondenceClass correspondence = (CorrespondenceClass)ClassManager.createClass(520);
correspondence.loadChilds(correspondenceRow);
Iterator cItemRowsIter = correspondenceRow.getRowSet().getRows().iterator();
while (cItemRowsIter.hasNext()) {
Row cItemRow = (Row)cItemRowsIter.next();
boolean needDelete = true;
if ( (ObjectUtil.findNewCell(cItemRow, "TI", "R").getColumnValue() == null) ||
(ObjectUtil.findNewCell(cItemRow, "TI", "RI").getColumnValue() == null) ) {
needDelete = false;
}
/* if (needDelete) {
int r = Integer.parseInt(ObjectUtil.findNewCell(cItemRow, "TI", "R").getColumnValue().toString());
int ri = Integer.parseInt(ObjectUtil.findNewCell(cItemRow, "TI", "RI").getColumnValue().toString());
RegClass.deleteRelativeThings(r, ri);
DAO dao = DAO.getInstance();
dao.update(Resources.DELETE_RI_BY_R_RI_SQL);
dao.setInt(1, r);
dao.setInt(2, ri);
dao.executeUpdate();
}*/
if(needDelete){
int r = Integer.parseInt(ObjectUtil.findNewCell(cItemRow, "TI", "R").getColumnValue().toString());
RegClass.delete(r);
}
}
}
public static boolean isRegUsedInCorrespondence(Row regItemRow) {
boolean result = false;
if ( (ObjectUtil.findNewCell(regItemRow, "RI", "R").getColumnValue() == null) ||
(ObjectUtil.findNewCell(regItemRow, "RI", "RI").getColumnValue() == null) ) {
return false;
}
int r = Integer.parseInt(ObjectUtil.findNewCell(regItemRow, "RI", "R").getColumnValue().toString());
int ri = Integer.parseInt(ObjectUtil.findNewCell(regItemRow, "RI", "RI").getColumnValue().toString());
DAO dao = DAO.getInstance();
dao.query(Resources.SELECT_FROM_TI_BY_R_RI_SQL);
dao.setInt(1, r);
dao.setInt(2, ri);
ResultSet rs = dao.executeQuery();
try {
if (rs.next()) {
result = true;
}
rs.close();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
public static boolean isIPUsedInCorrespondence(Row ipRow) {
boolean result = false;
String im = ObjectUtil.findNewCell(ipRow, "IP", "IM").getColumnValue().toString();
String ip = ObjectUtil.findNewCell(ipRow, "IP", "IP").getColumnValue().toString();
CorrespondenceClass correspondence = (CorrespondenceClass)ClassManager.createClass(520);
StringBuffer sb = new StringBuffer(correspondence.getBasicSQL());
sb.append(" WHERE TI.IM=? AND TI.IP=?");
String sql = sb.toString();
DAO dao = DAO.getInstance();
dao.query(sql);
// System.out.println("im = " + im + " ip = " + ip);
dao.setObject(1, im);
dao.setObject(2, ip);
ResultSet rs = dao.executeQuery();
try {
if ( (rs.next()) && (im.equals(rs.getObject("IM"))) && (ip.equals(rs.getObject("IP"))) ) {
result = true;
}
rs.close();
} catch (SQLException sqle) {
sqle.printStackTrace();
}
return result;
}
public static boolean isPReferencedInCorrespondence(Row pRow) {
boolean result = false;
String ns = ObjectUtil.findNewCell(pRow, "P", "NS").getColumnValue().toString();
String p = ObjectUtil.findNewCell(pRow, "P", "P").getColumnValue().toString();
CorrespondenceClass correspondence = (CorrespondenceClass)ClassManager.createClass(520);
StringBuffer sb = new StringBuffer(correspondence.getBasicSQL());
sb.append(" WHERE T.NS=? AND T.P=?");
String sql = sb.toString();
DAO dao = DAO.getInstance();
dao.query(sql);
dao.setString(1, ns);
dao.setString(2, p);
ResultSet rs = dao.executeQuery();
try {
if ( (rs.next()) && (ns.equals(rs.getObject("NS"))) && (p.equals(rs.getObject("P"))) ) {
result = true;
}
rs.close();
} catch (SQLException sqle) {
sqle.printStackTrace();
}
return result;
}
public static void analyCorrespondenceCIXFile(RealCIXFile realCIXFile, MainListener listener) {
Vector notEncryedDatas = realCIXFile.getNotEncryedDatas();
String ns = (String)notEncryedDatas.get(0);
String p = (String)notEncryedDatas.get(1);
String pa = (String)notEncryedDatas.get(2);
PartnerClass partner = (PartnerClass)ClassManager.createClass(250);
// System.err.println("ns = " + ns + " p = " + p + " pa = " + pa);
Row partnerAccountRow = PartnerClass.findPartnerAccountRow(partner, ns, p, pa);
if (partnerAccountRow == null) {
StringBuffer sb = new StringBuffer(TxtManager.getTxt("INFORMATION.IMPORT.NOTFINDPA1"));
sb.append(ns + "/" + p + "/" + pa + " !");
DialogManager.showMessageDialog(listener.getContainer(), sb.toString());
} else {
boolean result = true;
String urns = (String)ObjectUtil.findNewCell(partnerAccountRow, "PA", "URNS").getColumnValue();
String urp = (String)ObjectUtil.findNewCell(partnerAccountRow, "PA", "URP").getColumnValue();
String urpa = (String)ObjectUtil.findNewCell(partnerAccountRow, "PA", "URPA").getColumnValue();
PublicKey publicKey = (PublicKey)ObjectUtil.findNewCell(partnerAccountRow, "PA", "PUBKEY").getColumnValue();
if ( ( (urns == null) || (urns.trim().length() <= 0) ) ||
( (urp == null) || (urp.trim().length() <= 0) ) ||
( (urpa == null) || (urpa.trim().length() <= 0) ) ||
(publicKey == null) ) {
result = false;
}
if (!result) {
StringBuffer sb = new StringBuffer(TxtManager.getTxt("INFORMATION.IMPORT.NOTCREATERELATIVE1"));
sb.append(ns + "/" + p + "/" + pa + " , ");
sb.append(TxtManager.getTxt("INFORMATION.IMPORT.NOTCREATERELATIVE2"));
DialogManager.showMessageDialog(listener.getContainer(), sb.toString());
} else {
if (publicKey != null) {
Vector datas = realCIXFile.getDatas(publicKey);
if (datas == null) {
StringBuffer sb = new StringBuffer(TxtManager.getTxt("INFORMATION.IMPORT.PUBKEYISWRONG1"));
sb.append(ns + "/" + p + "/" + pa + " , ");
sb.append(TxtManager.getTxt("INFORMATION.IMPORT.PUBKEYISWRONG2"));
DialogManager.showMessageDialog(listener.getContainer(), sb.toString());
} else {//import success
// System.err.println("urns = " + urns + " urp = " + urp + " urpa = " + urpa);
DialogManager.showMessageDialog(listener.getContainer(), TxtManager.getTxt("INFORMATION.IMPORT.IMPORTSUCCESS"));
DialogManager.showMessageDialog(listener.getContainer(), TxtManager.getTxt("INFORMATION.IMPORT.CREATECORRESPONDENCE"));
Row correspondenceRow = (Row)datas.get(0);
listener.showObjectView(520);
listener.getContainer().updateTable();
Row newRow = new Row(listener.getContainer().getCurrentObject().getRowType());
ObjectUtil.findNewCell(newRow, "T", "URT").setColumnValue(ObjectUtil.findNewCell(correspondenceRow, "T", "T").getColumnValue());
ObjectUtil.findNewCell(newRow, "T", "TT").setColumnValue(ObjectUtil.findNewCell(correspondenceRow, "T", "TT").getColumnValue());
ObjectUtil.findNewCell(newRow, "T", "NS").setColumnValue(ns);
ObjectUtil.findNewCell(newRow, "T", "P").setColumnValue(p);
ObjectUtil.findNewCell(newRow, "T", "PA").setColumnValue(pa);
ObjectUtil.findNewCell(newRow, "T", "RECBNS").setColumnValue(ObjectUtil.findNewCell(correspondenceRow, "T", "RECBNS").getColumnValue());
ObjectUtil.findNewCell(newRow, "T", "RECB").setColumnValue(ObjectUtil.findNewCell(correspondenceRow, "T", "RECB").getColumnValue());
ObjectUtil.findNewCell(newRow, "T", "RECBA").setColumnValue(ObjectUtil.findNewCell(correspondenceRow, "T", "RECBA").getColumnValue());
ObjectUtil.findNewCell(newRow, "T", "REQUEST").setColumnValue(ObjectUtil.findNewCell(correspondenceRow, "T", "REQUEST").getColumnValue());
ObjectUtil.findNewCell(newRow, "T", "DUE").setColumnValue(ObjectUtil.findNewCell(correspondenceRow, "T", "DUE").getColumnValue());
ObjectUtil.findNewCell(newRow, "T", "TXT256").setColumnValue(ObjectUtil.findNewCell(correspondenceRow, "T", "TXT256").getColumnValue());
Iterator correspondenceItemRowsIter = correspondenceRow.getRowSet().getRows().iterator();
while (correspondenceItemRowsIter.hasNext()) {
Row correspondenceItemRow = (Row)correspondenceItemRowsIter.next();
boolean stat = false;
if ( ( (correspondenceRow.isAdd()) && (correspondenceItemRow != correspondenceRow) ) ||
(!correspondenceRow.isAdd()) ) {
stat = true;
}
if (stat) {//add childRow
Row childRow = ObjectUtil.addnewChildRow(listener.getContainer().getCurrentObject(), correspondenceItemRow);
double tamt = 0.0;
if ( (ObjectUtil.findNewCell(correspondenceItemRow, "TI", "TAMT").getColumnValue() != null) &&
(ObjectUtil.findNewCell(correspondenceItemRow, "TI", "TAMT").getColumnValue().toString().trim().length() > 0) ) {
tamt = 0 - Double.parseDouble(ObjectUtil.findNewCell(correspondenceItemRow, "TI", "TAMT").getColumnValue().toString());
}
ObjectUtil.findNewCell(childRow, "TI", "TAMT").setColumnValue(tamt);
//just for import CIX file....
ObjectUtil.findNewCell(childRow, "TI", "R").setColumnValue(0);
ObjectUtil.findNewCell(childRow, "TI", "RI").setColumnValue(0);
newRow.getRowSet().getRows().add(childRow);
listener.getContainer().getCurrentObject().getRows().add(childRow);
}
}
listener.getContainer().getCurrentObject().getRows().add(newRow);
new ObjectEdit(listener.getContainer(), listener.getContainer().getCurrentObject(), newRow, "Add", "Add");
listener.getContainer().setEnabled(false);
}
}
}
}
}
public static RealCIXFile exportCorrespondenceCIXFile(Row correspondenceRow) {
RealCIXFile realCIXFile = null;
String type = "Correspondence";
Vector datas = new Vector();
Vector notEncryedDatas = new Vector();
datas.add(correspondenceRow);
String ns = ObjectUtil.findNewCell(correspondenceRow, "T", "NS").getColumnValue().toString();
String p = ObjectUtil.findNewCell(correspondenceRow, "T", "P").getColumnValue().toString();
String pa = ObjectUtil.findNewCell(correspondenceRow, "T", "PA").getColumnValue().toString();
PartnerClass partner = (PartnerClass)ClassManager.createClass(250);
Row partnerAccountRow = null;
partnerAccountRow = PartnerClass.findPartnerAccountRow(partner, ns, p, pa);
Row mePartnerAccountRow = null;
if (partnerAccountRow != null)
mePartnerAccountRow = PartnerClass.getMePartnerAccount(partnerAccountRow);
PrivateKey privateKey = null;
if (mePartnerAccountRow != null) {
privateKey = (PrivateKey)ObjectUtil.findNewCell(mePartnerAccountRow, "PA", "PRIKEY").getColumnValue();
}
if (privateKey != null) {
String urns = ObjectUtil.findNewCell(partnerAccountRow, "PA", "URNS").getColumnValue().toString();
String urp = ObjectUtil.findNewCell(partnerAccountRow, "PA", "URP").getColumnValue().toString();
String urpa = ObjectUtil.findNewCell(partnerAccountRow, "PA", "URPA").getColumnValue().toString();
notEncryedDatas.add(urns);
notEncryedDatas.add(urp);
notEncryedDatas.add(urpa);
realCIXFile = new RealCIXFile(type, privateKey, notEncryedDatas, datas);
}
return realCIXFile;
}
public static boolean isThisCorrespondenceCanExport(Row correspondenceRow) {
boolean result = true;
String ns = ObjectUtil.findNewCell(correspondenceRow, "T", "NS").getColumnValue().toString();
String p = ObjectUtil.findNewCell(correspondenceRow, "T", "P").getColumnValue().toString();
String pa = ObjectUtil.findNewCell(correspondenceRow, "T", "PA").getColumnValue().toString();
DAO dao = DAO.getInstance();
dao.query(Resources.SELECT_PA_SQL);
dao.setString(1, ns);
dao.setString(2, p);
dao.setString(3, pa);
ResultSet rs = dao.executeQuery();
String urns = null;
String urp = null;
String urpa = null;
PublicKey pubkey = null;
try {
if (rs.next()) {
urns = rs.getString("URNS");
urp = rs.getString("URP");
urpa = rs.getString("URPA");
pubkey = (PublicKey)rs.getObject("PUBKEY");
}
rs.close();
} catch (Exception e) {
e.printStackTrace();
}
if ( ( (urns == null) || (urns.trim().length() <= 0) ) ||
( (urp == null) || (urp.trim().length() <= 0) ) ||
( (urpa == null) || (urpa.trim().length() <= 0) ) ||
(pubkey == null) ) {
result = false;
}
return result;
}
public static boolean registerTransfer(Row mainRow, String ld) {
boolean result = false;
int r = RegClass.getMaxR() + 1;
String at = "REAL";
java.util.Date now = new java.util.Date(System.currentTimeMillis());
String rdate = getTime(now);
String created = TimeManager.getTime(now.getTime());
String createdby = UserClass.getCurrentRUser();
String lastchanged = created;
String lastchangedby = createdby;
Cell txt256Cell = ObjectUtil.findNewCell(mainRow, "T", "TXT256");
String txt256 = (String)txt256Cell.getColumnValue();
DAO dao = DAO.getInstance();
dao.update(Resources.INSERT_R_SQL);
dao.setObject(1, r);
dao.setObject(2, at);
dao.setObject(3, rdate);
dao.setObject(4, created);
dao.setObject(5, createdby);
dao.setObject(6, lastchanged);
dao.setObject(7, lastchangedby);
dao.setObject(8, txt256);
dao.executeUpdate();
int currentRi = 0;
double amt = 0.0;
Iterator rowsIter = mainRow.getRowSet().getRows().iterator();
while (rowsIter.hasNext()) {
Row childRow = (Row)rowsIter.next();
if ( (childRow != null) && (childRow != mainRow) ) {
currentRi++;
txt256Cell = ObjectUtil.findNewCell(childRow, "TI", "TXT256");
txt256 = (String)txt256Cell.getColumnValue();
Cell tcCell = ObjectUtil.findNewCell(childRow, "TI", "TC");
String tc = (String)tcCell.getColumnValue();
Cell tamtCell = ObjectUtil.findNewCell(childRow, "TI", "TAMT");
double tamt = 0.0;
if (tamtCell.getColumnValue() != null) {
tamt = ((Number)tamtCell.getColumnValue()).doubleValue();
}
String lc = FamilyClass.getLocalCurrency();
double xr = XRClass.getExchangeRate(lc, tc, rdate);
double lamt = tamt * xr;
amt+= lamt;
Cell nsCell = ObjectUtil.findNewCell(mainRow, "T", "NS");
String ns = (String)nsCell.getColumnValue();
Cell pCell = ObjectUtil.findNewCell(mainRow, "T", "P");
String p = (String)pCell.getColumnValue();
Cell paCell = ObjectUtil.findNewCell(mainRow, "T", "PA");
String pa = (String)paCell.getColumnValue();
Cell mCell = ObjectUtil.findNewCell(childRow, "TI", "M");
String m = (String)mCell.getColumnValue();
Cell muomCell = ObjectUtil.findNewCell(childRow, "TI", "MUOM");
String muom = (String)muomCell.getColumnValue();
Cell mquanCell = ObjectUtil.findNewCell(childRow, "TI", "MQUAN");
double mquan = 0.0;
if (mquanCell.getColumnValue() != null) {
mquan = ((Number)mquanCell.getColumnValue()).doubleValue();
}
Cell mpriceCell = ObjectUtil.findNewCell(childRow, "TI", "MPRICE");
double mprice = 0.0;
if (mpriceCell.getColumnValue() != null) {
mprice = ((Number)mpriceCell.getColumnValue()).doubleValue();
}
Cell imCell = ObjectUtil.findNewCell(childRow, "TI", "IM");
String im = (String)imCell.getColumnValue();
Cell ipCell = ObjectUtil.findNewCell(childRow, "TI", "IP");
String ip = (String)ipCell.getColumnValue();
Cell ipuomCell = ObjectUtil.findNewCell(childRow, "TI", "IPUOM");
String ipuom = (String)ipuomCell.getColumnValue();
Cell ipquanCell = ObjectUtil.findNewCell(childRow, "TI", "IPQUAN");
double ipquan = 0.0;
if (ipquanCell.getColumnValue() != null) {
ipquan = ((Number)ipquanCell.getColumnValue()).doubleValue();
}
Cell ippriceCell = ObjectUtil.findNewCell(childRow, "TI", "IPPRICE");
double ipprice = 0.0;
if (ippriceCell.getColumnValue() != null) {
ipprice = ((Number)ippriceCell.getColumnValue()).doubleValue();
}
dao.update(Resources.INSERT_RI_SQL);
dao.setObject(1, r);
dao.setObject(2, currentRi);
dao.setObject(3, txt256);
dao.setObject(4, ld);
dao.setObject(5, tc);
dao.setObject(6, -tamt);
dao.setObject(7, lc);
dao.setObject(8, xr);
dao.setObject(9, -lamt);
dao.setObject(10, ns);
dao.setObject(11, p);
dao.setObject(12, pa);
dao.setObject(13, m);
dao.setObject(14, muom);
dao.setObject(15, mquan);
dao.setObject(16, mprice);
dao.setObject(17, null);
dao.setObject(18, im);
dao.setObject(19, ip);
dao.setObject(20, ipuom);
dao.setObject(21, ipquan);
dao.setObject(22, ipprice);
dao.executeUpdate();
}
}
//At this point, setld zhanghu to add ouy.
txt256Cell = ObjectUtil.findNewCell(mainRow, "TI", "TXT256");
txt256 = (String)txt256Cell.getColumnValue();
Cell tcCell = ObjectUtil.findNewCell(mainRow, "TI", "TC");
String tc = (String)tcCell.getColumnValue();
Cell tamtCell = ObjectUtil.findNewCell(mainRow, "TI", "TAMT");
double tamt = 0.0;
if (tamtCell.getColumnValue() != null) {
tamt = amt;
}
String lc = FamilyClass.getLocalCurrency();
double xr = XRClass.getExchangeRate(lc, tc, rdate);
double lamt = tamt * xr;
amt+= lamt;
Cell nsCell = ObjectUtil.findNewCell(mainRow, "T", "NS");
String ns = (String)nsCell.getColumnValue();
Cell pCell = ObjectUtil.findNewCell(mainRow, "T", "P");
String p = (String)pCell.getColumnValue();
Cell paCell = ObjectUtil.findNewCell(mainRow, "T", "PA");
String pa = (String)paCell.getColumnValue();
Cell mCell = ObjectUtil.findNewCell(mainRow, "TI", "M");
String m = (String)mCell.getColumnValue();
Cell muomCell = ObjectUtil.findNewCell(mainRow, "TI", "MUOM");
String muom = (String)muomCell.getColumnValue();
Cell mquanCell = ObjectUtil.findNewCell(mainRow, "TI", "MQUAN");
double mquan = 0.0;
if (mquanCell.getColumnValue() != null) {
mquan = ((Number)mquanCell.getColumnValue()).doubleValue();
}
Cell mpriceCell = ObjectUtil.findNewCell(mainRow, "TI", "MPRICE");
double mprice = 0.0;
if (mpriceCell.getColumnValue() != null) {
mprice = ((Number)mpriceCell.getColumnValue()).doubleValue();
}
Cell imCell = ObjectUtil.findNewCell(mainRow, "TI", "IM");
String im = (String)imCell.getColumnValue();
Cell ipCell = ObjectUtil.findNewCell(mainRow, "TI", "IP");
String ip = (String)ipCell.getColumnValue();
Cell ipuomCell = ObjectUtil.findNewCell(mainRow, "TI", "IPUOM");
String ipuom = (String)ipuomCell.getColumnValue();
Cell ipquanCell = ObjectUtil.findNewCell(mainRow, "TI", "IPQUAN");
double ipquan = 0.0;
if (ipquanCell.getColumnValue() != null) {
ipquan = ((Number)ipquanCell.getColumnValue()).doubleValue();
}
Cell ippriceCell = ObjectUtil.findNewCell(mainRow, "TI", "IPPRICE");
double ipprice = 0.0;
if (ippriceCell.getColumnValue() != null) {
ipprice = ((Number)ippriceCell.getColumnValue()).doubleValue();
}
currentRi++;
dao.update(Resources.INSERT_RI_SQL);
dao.setObject(1, r);
dao.setObject(2, currentRi);
dao.setObject(3, txt256);
dao.setObject(4, ld);
dao.setObject(5, tc);
dao.setObject(6, amt);
dao.setObject(7, lc);
dao.setObject(8, xr);
dao.setObject(9, amt);
dao.setObject(10, ns);
dao.setObject(11, p);
dao.setObject(12, pa);
dao.setObject(13, m);
dao.setObject(14, muom);
dao.setObject(15, mquan);
dao.setObject(16, mprice);
dao.setObject(17, null);
dao.setObject(18, im);
dao.setObject(19, ip);
dao.setObject(20, ipuom);
dao.setObject(21, ipquan);
dao.setObject(22, ipprice);
dao.executeUpdate();
return result;
}
public static boolean needDeleteRegs(Row correspondenceRow) {
boolean result = false;
Iterator correspondenceItemRowsIter = correspondenceRow.getRowSet().getRows().iterator();
while (correspondenceItemRowsIter.hasNext()) {
Row correspondenceItemRow = (Row)correspondenceItemRowsIter.next();
int newR = -1;
if ( (ObjectUtil.findNewCell(correspondenceItemRow, "TI", "R").getColumnValue() != null) &&
(ObjectUtil.findNewCell(correspondenceItemRow, "TI", "R").getColumnValue().toString().trim().length() > 0) ) {
newR = Integer.parseInt(ObjectUtil.findNewCell(correspondenceItemRow, "TI", "R").getColumnValue().toString());
}
if (newR != -1) {
result = true;
break;
}
}
return result;
}
public static boolean correspondenceRegsInformation(Row correspondenceRow) {
boolean result = true;
Vector rAndRis = new Vector();
Iterator rowsIter = correspondenceRow.getRowSet().getRows().iterator();
while (rowsIter.hasNext()) {
Row row = (Row)rowsIter.next();
int newR = -1;
int newRI = -1;
if ( (ObjectUtil.findNewCell(row, "TI", "R").getColumnValue() != null) && (ObjectUtil.findNewCell(row, "TI", "R").getColumnValue().toString().trim().length() > 0) ) {
newR = Integer.parseInt(ObjectUtil.findNewCell(row, "TI", "R").getColumnValue().toString());
}
if ( (ObjectUtil.findNewCell(row, "TI", "RI").getColumnValue() != null) && (ObjectUtil.findNewCell(row, "TI", "RI").getColumnValue().toString().trim().length() > 0) ) {
newRI = Integer.parseInt(ObjectUtil.findNewCell(row, "TI", "RI").getColumnValue().toString());
}
if (rAndRis.size() == 0) {
String str = newR + "-" + newRI;
rAndRis.add(str);
} else {
String str = newR + "-" + newRI;
Iterator rAndRisIter = rAndRis.iterator();
while (rAndRisIter.hasNext()) {
String tempStr = (String)rAndRisIter.next();
if ( (newR != -1) && (newRI != -1) ) {
if (tempStr.equals(str)) {
result = false;
break;
}
}
}
}
}
return result;
}
public static int correspondenceRegs(Row correspondenceRow, String balanceLD) {
//Test if can regs
boolean allTamtEqualsZero = true;
Iterator rowsIter = correspondenceRow.getRowSet().getRows().iterator();
while (rowsIter.hasNext()) {
Row row = (Row)rowsIter.next();
if (correspondenceRow.isAdd()) {
if (row != correspondenceRow) {
Double tempTAmt = Double.parseDouble(ObjectUtil.findNewCell(row, "TI", "TAMT").getColumnValue().toString());
if (tempTAmt != 0.0) {
allTamtEqualsZero = false;
break;
}
}
} else {
Double tempTAmt = Double.parseDouble(ObjectUtil.findNewCell(row, "TI", "TAMT").getColumnValue().toString());
if (tempTAmt != 0.0) {
allTamtEqualsZero = false;
break;
}
}
}
if (allTamtEqualsZero) {
return -1;
}
//delete oldR
Vector newRAndOldRs = new Vector();//data struct: new_R-newR
rowsIter = correspondenceRow.getRowSet().getRows().iterator();
while (rowsIter.hasNext()) {
Row row = (Row)rowsIter.next();
int oldR = -1;
int newR = -1;
if ( (ObjectUtil.findOldCell(row, "TI", "R").getColumnValue() != null) && (ObjectUtil.findOldCell(row, "TI", "R").getColumnValue().toString().trim().length() > 0) ) {
oldR = Integer.parseInt(ObjectUtil.findOldCell(row, "TI", "R").getColumnValue().toString());
}
if ( (ObjectUtil.findNewCell(row, "TI", "R").getColumnValue() != null) && (ObjectUtil.findNewCell(row, "TI", "R").getColumnValue().toString().trim().length() > 0) ) {
newR = Integer.parseInt(ObjectUtil.findNewCell(row, "TI", "R").getColumnValue().toString());
}
if (!row.isDelete()) {
if (oldR != -1) {
TaxClass.deleteR(oldR);//USE TaxClass
TaxClass.deleteRI(oldR);//USE TaxClass
}
if (newR != -1) {
TaxClass.deleteR(newR);//USE TaxClass
TaxClass.deleteRI(newR);//USE TaxClass
}
} else {
if (!row.isAdd()) {
if (oldR != -1) {
TaxClass.deleteR(oldR);//USE TaxClass
TaxClass.deleteRI(oldR);//USE TaxClass
}
}
}
}
rowsIter = correspondenceRow.getRowSet().getRows().iterator();
int new_R = TaxClass.getMAXR() + 1;
while (rowsIter.hasNext()) {
Row row = (Row)rowsIter.next();
int newR = -1;
if ( (ObjectUtil.findNewCell(row, "TI", "R").getColumnValue() != null) && (ObjectUtil.findNewCell(row, "TI", "R").getColumnValue().toString().trim().length() > 0) ) {
newR = Integer.parseInt(ObjectUtil.findNewCell(row, "TI", "R").getColumnValue().toString());
}
String str = new_R + "-" + newR;
newRAndOldRs.add(str);
}
//add new R
rowsIter = correspondenceRow.getRowSet().getRows().iterator();
Iterator newRAndOldRsIter = newRAndOldRs.iterator();
while (rowsIter.hasNext()) {
Row row = (Row)rowsIter.next();
String str = (String)newRAndOldRsIter.next();
StringTokenizer st = new StringTokenizer(str, "-");
String tDate = ObjectUtil.findNewCell(correspondenceRow, "T", "DUE").getColumnValue().toString();
String txt512 = "";
if (ObjectUtil.findNewCell(correspondenceRow, "T", "TXT256").getColumnValue() != null)
txt512 = ObjectUtil.findNewCell(correspondenceRow, "T", "TXT256").getColumnValue().toString();
new_R = Integer.parseInt(st.nextElement().toString());
TaxClass.insertr(new_R, tDate, txt512);//USE TaxClass
}
//add newri
correspondenceRow.setModify(true);
rowsIter = correspondenceRow.getRowSet().getRows().iterator();
newRAndOldRsIter = newRAndOldRs.iterator();
int currentRI = 1;
while (rowsIter.hasNext()) {
Row row = (Row)rowsIter.next();
String str = (String)newRAndOldRsIter.next();
StringTokenizer st = new StringTokenizer(str, "-");
String tDate = ObjectUtil.findNewCell(correspondenceRow, "T", "DUE").getColumnValue().toString();
String txt512 = "";
String ld = CorrespondenceClass.getLD(correspondenceRow);
if (ObjectUtil.findNewCell(row, "TI", "TXT256").getColumnValue() != null)
txt512 = ObjectUtil.findNewCell(row, "TI", "TXT256").getColumnValue().toString();
String tc = "";
double tamt = 0.0;
if (correspondenceRow.isAdd()) {
if (row != correspondenceRow) {
String t = ObjectUtil.findNewCell(row, "TI", "T").getColumnValue().toString();
String ti = ObjectUtil.findNewCell(row, "TI", "TI").getColumnValue().toString();
txt512 = "Correspondence - " + t + " - " + ti;
tc = ObjectUtil.findNewCell(row, "TI", "TC").getColumnValue().toString();
tamt = Double.parseDouble(ObjectUtil.findNewCell(row, "TI", "TAMT").getColumnValue().toString());
}
} else if (correspondenceRow.isModify()) {
String t = ObjectUtil.findNewCell(row, "TI", "T").getColumnValue().toString();
String ti = ObjectUtil.findNewCell(row, "TI", "TI").getColumnValue().toString();
txt512 = "Correspondence - " + t + " - " + ti;
tc = ObjectUtil.findNewCell(row, "TI", "TC").getColumnValue().toString();
tamt = Double.parseDouble(ObjectUtil.findNewCell(row, "TI", "TAMT").getColumnValue().toString());
}
new_R = Integer.parseInt(st.nextElement().toString());
if (correspondenceRow.isAdd()) {
if (row != correspondenceRow) {
insertri(row, new_R, currentRI, ld, txt512, tc, tamt, tDate);
ObjectUtil.findNewCell(row, "TI", "RI").setColumnValue(currentRI);
currentRI++;
ObjectUtil.findNewCell(row, "TI", "R").setColumnValue(new_R);
}
} else {
insertri(row, new_R, currentRI, ld, txt512, tc, tamt, tDate);
ObjectUtil.findNewCell(row, "TI", "RI").setColumnValue(currentRI);
currentRI++;
ObjectUtil.findNewCell(row, "TI", "R").setColumnValue(new_R);
}
}
//BALANCE
newRAndOldRsIter = newRAndOldRs.iterator();
String balanceLd = balanceLD;
String txt256 = TxtManager.getTxt("VIEW.OBJECTEDIT.CORRESPONDENCE.CORRESPONDENCEOFFSET");
String tc = FamilyClass.getLocalCurrency();
String lc = tc;
String tDate = ObjectUtil.findNewCell(correspondenceRow, "T", "DUE").getColumnValue().toString();
int currentR = -1;
while (newRAndOldRsIter.hasNext()) {
String str = (String)newRAndOldRsIter.next();
StringTokenizer st = new StringTokenizer(str, "-");
new_R = Integer.parseInt(st.nextElement().toString());
if (currentR != new_R) {
currentR = new_R;
int ri = TaxClass.getMAXRIByR(currentR) + 1;//USE TaxClass
double tamt = 0 - TaxClass.getSUMLamt(currentR);//USE TaxClass
insertri_balance(correspondenceRow, currentR, ri, balanceLd, txt256, tc, tamt, tDate);
}
}
return new_R;
}
public static void insertri_balance(Row correspondenceRow, int r, int ri, String ld, String txt256, String tc, double tamt, String rDate) {
DAO dao = DAO.getInstance();
String lc = FamilyClass.getLocalCurrency();
double xr = TaxClass.getXR(lc, tc, rDate);//USE TaxClass
double lamt = tamt * xr;
dao.update(Resources.INSERT_RI_VALUE_SQL);
dao.setObject(1, r);
dao.setObject(2, ri);
dao.setObject(3, txt256);
dao.setObject(4, ld);
dao.setObject(5, tc);
dao.setObject(6, tamt);
dao.setObject(7, lc);
dao.setObject(8, xr);
dao.setObject(9, lamt);
dao.setObject(10, null);
dao.setObject(11, null);
dao.setObject(12, null);
dao.executeUpdate();
}
public static void insertri(Row correspondenceRow, int r, int ri, String ld, String txt256, String tc, double tamt, String rDate) {
DAO dao = DAO.getInstance();
String lc = FamilyClass.getLocalCurrency();
double xr = TaxClass.getXR(lc, tc, rDate);//USE TaxClass
double lamt = tamt * xr;
dao.update(Resources.INSERT_RI_VALUE_SQL_CORR);
dao.setObject(1, r);
dao.setObject(2, ri);
dao.setObject(3, txt256);
dao.setObject(4, ld);
dao.setObject(5, tc);
dao.setObject(6, tamt);
dao.setObject(7, lc);
dao.setObject(8, xr);
dao.setObject(9, lamt);
dao.setObject(10, ObjectUtil.findNewCell(correspondenceRow, "T", "NS").getColumnValue());
dao.setObject(11, ObjectUtil.findNewCell(correspondenceRow, "T", "P").getColumnValue());
dao.setObject(12, ObjectUtil.findNewCell(correspondenceRow, "T", "PA").getColumnValue());
dao.setObject(13, ObjectUtil.findNewCell(correspondenceRow, "TI", "M").getColumnValue());
dao.setObject(14, ObjectUtil.findNewCell(correspondenceRow, "TI", "MUOM").getColumnValue());
dao.setObject(15, ObjectUtil.findNewCell(correspondenceRow, "TI", "MQUAN").getColumnValue());
dao.setObject(16, ObjectUtil.findNewCell(correspondenceRow, "TI", "MPRICE").getColumnValue());
dao.setObject(17, ObjectUtil.findNewCell(correspondenceRow, "TI", "IM").getColumnValue());
dao.setObject(18, ObjectUtil.findNewCell(correspondenceRow, "TI", "IP").getColumnValue());
dao.setObject(19, ObjectUtil.findNewCell(correspondenceRow, "TI", "IPUOM").getColumnValue());
dao.setObject(20, ObjectUtil.findNewCell(correspondenceRow, "TI", "IPQUAN").getColumnValue());
dao.setObject(21, ObjectUtil.findNewCell(correspondenceRow, "TI", "IPPRICE").getColumnValue());
dao.executeUpdate();
// System.err.println("ObjectUtil.findNewCell(correspondenceRow, 'TI', 'MPRICE') = " + ObjectUtil.findNewCell(correspondenceRow, "TI", "MPRICE").getColumnValue());
}
public static String getLD(Row correspondenceRow) {
String ld = null;
DAO dao = DAO.getInstance();
dao.query(Resources.SELECT_LD_FROM_PA_SQL);
dao.setObject(1, ObjectUtil.findNewCell(correspondenceRow, "T", "NS").getColumnValue().toString());
dao.setObject(2, ObjectUtil.findNewCell(correspondenceRow, "T", "P").getColumnValue().toString());
dao.setObject(3, ObjectUtil.findNewCell(correspondenceRow, "T", "PA").getColumnValue().toString());
ResultSet rs = dao.executeQuery();
try {
if (rs.next()) {
ld = rs.getString("LD");
}
rs.close();
} catch (Exception e) {
}
return ld;
}
public Vector dealWithCorrespondence(Row mainRow) {
Vector data = null;
Cell nsCell = ObjectUtil.findNewCell(mainRow, "T", "NS");
String ns = (String)nsCell.getColumnValue();
Cell pCell = ObjectUtil.findNewCell(mainRow, "T", "P");
String p = (String)pCell.getColumnValue();
Cell paCell = ObjectUtil.findNewCell(mainRow, "T", "PA");
String pa = (String)paCell.getColumnValue();
if (isthisPartnerAccountCanTransfer(ns, p, pa)) {
data = generateCixFile(mainRow);
} else {
data = null;
}
return data;
}
private Vector generateCixFile(Row mainRow) {
Vector data = new Vector();
Cell urtCell = ObjectUtil.findNewCell(mainRow, "T", "URT");
String urt = (String)urtCell.getColumnValue();
if ( (urt == null) || (urt.trim().equals("")) ) {
CixFile file = generateCixFile_Stat4(mainRow);
String fileName = generateCixFileName(mainRow, 4);
data.add(file);
data.add(fileName);
} else {
CixFile file = generateCixFile_Stat5(mainRow);
String fileName = generateCixFileName(mainRow, 5);
data.add(file);
data.add(fileName);
registerTransfer(mainRow, null);
}
return data;
}
private CixFile generateCixFile_Stat4(Row mainRow) {
CixFile file = null;
int cixFileStat = 4;
Vector noEncryData = new Vector();
byte[] wrappedKey = null;
Vector encryData = new Vector();
SealedObject sealedEncryData = null;
Cell nsCell = ObjectUtil.findNewCell(mainRow, "T", "NS");
String ns = (String)nsCell.getColumnValue();
Cell pCell = ObjectUtil.findNewCell(mainRow, "T", "P");
String p = (String)pCell.getColumnValue();
Cell paCell = ObjectUtil.findNewCell(mainRow, "T", "PA");
String pa = (String)paCell.getColumnValue();
String urns = null;
String urp = null;
DAO dao = DAO.getInstance();
dao.query(Resources.SELECT_URNS_URP_FORM_P_SQL);
dao.setObject(1, ns);
dao.setObject(2, p);
ResultSet rs = dao.executeQuery();
try {
if (rs.next()) {
urns = rs.getString("URNS");
urp = rs.getString("URP");
}
rs.close();
} catch (Exception e) {
e.printStackTrace();
}
String urpa = null;
dao.query(Resources.SELECT_URPA_FROM_PA_SQL);
dao.setObject(1, ns);
dao.setObject(2, p);
dao.setObject(3, pa);
rs = dao.executeQuery();
try {
if (rs.next()) {
urpa = rs.getString("URPA");
}
rs.close();
} catch (Exception e) {
e.printStackTrace();
}
noEncryData.add(urns);
noEncryData.add(urp);
noEncryData.add(urpa);
encryData.add(mainRow);
PrivateKey priKey = getPriKey(ns, p, pa);
try {
KeyGenerator keyGen = KeyGenerator.getInstance("DES");
SecureRandom random = new SecureRandom();
keyGen.init(random);
SecretKey key = keyGen.generateKey();
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE,key);
sealedEncryData = new SealedObject(encryData, cipher);
cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.WRAP_MODE, priKey);
wrappedKey = cipher.wrap(key);
} catch (Exception e) {
e.printStackTrace();
}
file = new CixFile(cixFileStat, noEncryData, null, wrappedKey, sealedEncryData);
return file;
}
private CixFile generateCixFile_Stat5(Row mainRow) {
CixFile file = null;
return file;
}
private String generateCixFileName(Row mainRow, int stat) {
StringBuffer sb = new StringBuffer("");
Cell tCell = ObjectUtil.findNewCell(mainRow, "T", "T");
java.sql.Date now = new java.sql.Date(System.currentTimeMillis());
String time = now.toString();
sb.append(tCell.getColumnValue() + "_");
sb.append(stat + "_");
sb.append(time);
return sb.toString();
}
private boolean isthisPartnerAccountCanTransfer(String ns, String p, String pa) {
boolean result = false;
DAO dao = DAO.getInstance();
dao.query(Resources.SELECT_URPA_FROM_PA_SQL);
dao.setObject(1, ns);
dao.setObject(2, p);
dao.setObject(3, pa);
ResultSet rs = dao.executeQuery();
try {
if (rs.next()) {
String urpa = rs.getString("urpa");
if ( (urpa == null) || (urpa.trim().equals("")) )
result = false;
else
result = true;
}
rs.close();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
private PrivateKey getPriKey(String ns, String p, String pa) {
PrivateKey priKey = null;
DAO dao = DAO.getInstance();
dao.query(Resources.SELECT_PRIKEY_FROM_PA_BY_NS_P_PA_SQL);
dao.setObject(1, ns);
dao.setObject(2, p);
dao.setObject(3, pa);
dao.setObject(4, ns);
dao.setObject(5, p);
dao.setObject(6, pa);
ResultSet rs = dao.executeQuery();
try {
if (rs.next())
priKey = (PrivateKey)rs.getObject("PRIKEY");
rs.close();
} catch (Exception e) {
e.printStackTrace();
}
return priKey;
}
private static String getTime(java.util.Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH) + 1;
int day = cal.get(Calendar.DATE);
StringBuffer sb = new StringBuffer(year + "-");
if (month < 10) {
sb.append("0" + month + "-");
} else {
sb.append(month + "-");
}
if (day < 10) {
sb.append("0" + day);
} else {
sb.append(day);
}
return sb.toString();
}
}