+
+ static boolean updateNoticeDescription(int selectednotice_id, String text) {
+ try {
+ Connection conn = DriverManager.getConnection(JDBC + connectionURL);
+ PreparedStatement st = conn.prepareStatement("UPDATE legalnotices "
+ + "SET Description=? WHERE id=?;");
+ st.setString(1, text);
+ st.setInt(2, selectednotice_id);
+ st.execute();
+ conn.close();
+ return true;
+ } catch (SQLException ex) {
+ Logger.getLogger(Utility.class.getName()).log(Level.SEVERE, null, ex);
+ return false;
+ }
+
+ }
+
+ static boolean updateNoticeDispatchDetails(int selid, boolean notice_sent,
+ java.util.Date sent_date, String rpad_reference,
+ boolean notice_delivered, java.util.Date delivery_date) {
+ try {
+ Connection conn = DriverManager.getConnection(JDBC + connectionURL);
+ PreparedStatement st = conn.prepareStatement("UPDATE legalnotices"
+ + " SET NoticeSent=?, SentDate=?, RPADReference=?,"
+ + " NoticeDelivered=?, DeliveryDate=? WHERE id=?;");
+
+ st.setBoolean(1, notice_sent);
+ st.setDate(2, toSqlDate(sent_date));
+ st.setString(3, rpad_reference);
+ st.setBoolean(4, notice_delivered);
+ st.setDate(5, toSqlDate(delivery_date));
+ st.setInt (6, selid);
+ st.execute();
+ conn.close();
+ return true;
+ } catch (SQLException ex) {
+ Logger.getLogger(Utility.class.getName()).log(Level.SEVERE, null, ex);
+ return false;
+ }
+
+ }
+
+ private static Date toSqlDate(java.util.Date date) {
+ if (date == null)
+ return null;
+ Date sqldate = new Date (date.getTime()/1000);
+ return sqldate;
+ }
+
+ static boolean updateNoticeBillDetails(int selid, String bill_status,
+ java.util.Date bill_date, int bill_amount) {
+ try {
+ Connection conn = DriverManager.getConnection(JDBC + connectionURL);
+ PreparedStatement st = conn.prepareStatement("UPDATE legalnotices"
+ + " SET BillStatus=?,BillDate=?,BillAmount=? WHERE id=?;");
+ st.setString (1, bill_status);
+ st.setDate(2, toSqlDate(bill_date));
+ st.setInt(3, bill_amount);
+ st.setInt(4, selid);
+ st.execute();
+ conn.close();
+ return true;
+ } catch (SQLException ex) {
+ Logger.getLogger(Utility.class.getName()).log(Level.SEVERE, null, ex);
+ return false;
+ }
+
+ }
+
+ static boolean createDatabase(String db_path) {
+ saveConnectionURL(db_path);
+ String tblClients = "CREATE TABLE IF NOT EXISTS \"clients\" (\n" +
+" \"id\" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,\n" +
+" \"ClientName\" VARCHAR(255) NOT NULL UNIQUE,\n" +
+" \"ClientAddress\" TEXT,\n" +
+" \"ContactPerson\" TEXT,\n" +
+" \"MailID\" VARCHAR(255),\n" +
+" \"ContactNumber\" VARCHAR(30)\n" +
+" );";
+ String tblNotices = "CREATE TABLE IF NOT EXISTS \"legalnotices\" (\n" +
+ " \"id\" INTEGER PRIMARY KEY AUTOINCREMENT,\n" +
+ " \"ReferenceNumber\" TEXT NOT NULL UNIQUE,\n" +
+ " \"Description\" TEXT NOT NULL,\n" +
+ " \"EntrustmentDate\" INTEGER NOT NULL,\n" +
+ " \"ClientId\" INTEGER,\n" +
+ " \"DraftCreated\" INTEGER DEFAULT 0,\n" +
+ " \"DraftApproved\" INTEGER DEFAULT 0 CHECK(DraftApproved<=DraftCreated),\n" +
+ " \"NoticeSent\" INTEGER DEFAULT 0 CHECK(NoticeSent<=DraftApproved),\n" +
+ " \"SentDate\" INTEGER CHECK(SentDate>=EntrustmentDate),\n" +
+ " \"RPADReference\" TEXT,\n" +
+ " \"NoticeDelivered\" INTEGER DEFAULT 0 CHECK(NoticeDelivered<=NoticeSent),\n" +
+ " \"DeliveryDate\" INTEGER CHECK(DeliveryDate>=SentDate),\n" +
+ " \"BillStatus\" TEXT DEFAULT 'PENDING',\n" +
+ " \"BillAmount\" INTEGER DEFAULT 1000 CHECK(BillAmount>0),\n" +
+ " \"BillDate\" INTEGER CHECK(BillDate>=DeliveryDate),\n" +
+ " \"ClarificationPending\" INTEGER DEFAULT 0,\n" +
+ " \"ClarificationRemarks\" TEXT\n" +
+ ");";
+
+ try {
+ Connection conn = DriverManager.getConnection(JDBC + connectionURL);
+ Statement st1 = conn.createStatement();
+ st1.execute(tblClients);
+ st1.execute(tblNotices);
+ conn.close();
+ return true;
+ } catch (SQLException ex) {
+ Logger.getLogger(Utility.class.getName()).log(Level.SEVERE, null, ex);
+ return false;
+ }
+
+ }
+
+ static boolean updateNoticeClarificationDetails(int selected_id, boolean
+ clarification_pending, String clarification_remarks) {
+ try {
+ Connection conn = DriverManager.getConnection(JDBC + connectionURL);
+ PreparedStatement st = conn.prepareStatement ("UPDATE legalnotices"
+ + " SET ClarificationPending=?, ClarificationRemarks=? "
+ + "WHERE id=?;");
+ st.setBoolean(1, clarification_pending);
+ st.setString(2, clarification_remarks);
+ st.setInt (3, selected_id);
+ st.execute();
+ conn.close ();
+ return true;
+ } catch (SQLException ex) {
+ Logger.getLogger(Utility.class.getName()).log(Level.SEVERE, null, ex);
+ return false;
+ }
+
+ }
+
+ static boolean deleteNotice(int r) {
+ try {
+ Connection conn = DriverManager.getConnection(JDBC + connectionURL);
+ PreparedStatement st = conn.prepareStatement("DELETE FROM legalnotices"
+ + " WHERE id=?;");
+ st.setInt(1, r);
+ st.execute();
+ conn.close();
+ return true;
+ } catch (SQLException ex) {
+ Logger.getLogger(Utility.class.getName()).log(Level.SEVERE, null, ex);
+ return false;
+ }
+
+ }
+
+ static ArrayList<Object> getRaisedBills (int client_id) {
+ try {
+ Connection conn = DriverManager.getConnection(JDBC + connectionURL);
+ PreparedStatement st = conn.prepareStatement("SELECT ReferenceNumber, "
+ + "Description, BillDate, BillAmount"
+ + " FROM legalnotices WHERE BillStatus='RAISED' AND ClientId=?;");
+ st.setInt (1, client_id);
+
+ ResultSet rs = st.executeQuery ();
+ ArrayList<Object> bills = new ArrayList<>();
+ while (rs.next()) {
+ bills.add (rs.getString("ReferenceNumber"));
+ bills.add (rs.getString("Description"));
+ bills.add (getValidDate(rs, "BillDate"));
+ bills.add (rs.getInt("BillAmount"));
+ }
+ conn.close();
+ return bills;
+
+ } catch (SQLException ex) {
+ Logger.getLogger(Utility.class.getName()).log(Level.SEVERE, null, ex);
+ return null;
+ }
+
+ }
+
+ static boolean generateRaisedNoticesBill(String fileName, String clientName,
+ String clientAddress, String contactPerson, ArrayList<Object> bills) {
+ if (bills == null)
+ return false;
+ try {
+ InputStream templ = Utility.class.getClassLoader().getResourceAsStream("resources/noticebill.template.fodt");
+ if (templ == null)
+ return false;
+ DateFormat fmt = new SimpleDateFormat("dd MMM yyyy");
+ String templateMain = new String (templ.readAllBytes());
+ // this is for openoffice ODT - replace normal line breaks with the XML equivalent
+ String left = leftLetterHeader.replaceAll("\n", "<text:line-break/>");
+ String right = rightLetterHeader.replaceAll("\n", "<text:line-break/>");
+ String client_address = clientAddress.replaceAll ("\n", "<text:line-break/>");
+ String rows = generateBillRows (bills);
+ System.out.println (rows);
+
+ String strMain = MessageFormat.format(templateMain,
+ left, right,
+ fmt.format(new Date(System.currentTimeMillis())),
+ clientName, client_address, contactPerson, signatoryName, rows);
+
+ FileOutputStream f = new FileOutputStream (fileName);
+ f.write (strMain.getBytes());
+ f.close();
+ return true;
+ } catch (IOException ex) {
+ Logger.getLogger(Utility.class.getName()).log(Level.SEVERE, null, ex);
+ return false;
+ }
+ }
+
+ private static String generateBillRows(ArrayList<Object> bills) {
+ try {
+ InputStream tmpl = Utility.class.getClassLoader().getResourceAsStream("resources/tablerow.template.xml");
+ String rowtpl = new String(tmpl.readAllBytes());
+
+ DateFormat fmt = new SimpleDateFormat("dd/MM/yyyy");
+
+ StringBuilder bldr = new StringBuilder ();
+ for (int i = 0; i < bills.size(); i += 4) {
+ String row = MessageFormat.format (rowtpl, (String)bills.get(i),
+ (String)bills.get(i+1), fmt.format((java.util.Date)bills.get(i+2)),
+ (int)bills.get(i+3));
+ bldr.append(row);
+ }
+ return (bldr.toString());
+ } catch (IOException ex) {
+ Logger.getLogger(Utility.class.getName()).log(Level.SEVERE, null, ex);
+ return null;
+ }
+ }
+
+ static boolean updateNoticeBillStatus(int client_id, String from_status,
+ String to_status) {
+ try {
+ Connection conn = DriverManager.getConnection(JDBC + connectionURL);
+ PreparedStatement st = conn.prepareStatement("UPDATE legalnotices"
+ + " SET BillStatus=? WHERE BillStatus=? AND ClientId=?;");
+ st.setString (1, to_status);
+ st.setString (2, from_status);
+ st.setInt (3, client_id);
+ st.execute();
+ conn.close();
+ return true;
+ } catch (SQLException ex) {
+ Logger.getLogger(Utility.class.getName()).log(Level.SEVERE, null, ex);
+ return false;
+ }
+
+ }
+
+ static ArrayList<Object> getPendingPaymentBills(int clientid) {
+ ArrayList<Object> data = new ArrayList<>();
+ try {
+ Connection conn = DriverManager.getConnection(JDBC + connectionURL);
+
+ // if no client ID is specified i.e. -1 get ll
+ ResultSet rs;
+ if (clientid == -1) {
+ Statement st = conn.createStatement();
+ rs = st.executeQuery("SELECT ReferenceNumber, Description, "
+ + "BillDate, BillAmount, ClientName"
+ + " FROM legalnotices INNER JOIN clients ON ClientId=clients.id "
+ + "WHERE BillStatus='AWAITING PAYMENT';");
+ }
+ else {
+ PreparedStatement st = conn.prepareStatement("SELECT ReferenceNumber, "
+ + "Description, BillDate, BillAmount, ClientName"
+ + " FROM legalnotices INNER JOIN clients ON ClientId=clients.id "
+ + "WHERE BillStatus='AWAITING PAYMENT' AND ClientId=?;");
+ st.setInt (1, clientid);
+ rs = st.executeQuery();
+ }
+ DateFormat fmt = new SimpleDateFormat ("dd/MM/yyyy");
+ while (rs.next()) {
+ data.add (rs.getString("ReferenceNumber"));
+ data.add (rs.getString("Description"));
+ data.add (fmt.format (getValidDate(rs, "BillDate")));
+ data.add (rs.getInt ("BillAmount"));
+ data.add (rs.getString("ClientName"));
+ }
+ conn.close ();
+ return data;
+ } catch (SQLException ex) {
+ Logger.getLogger(Utility.class.getName()).log(Level.SEVERE, null, ex);
+ return null;
+ }
+
+ }
+
+ static boolean saveReportCSV(String filePath, String[] reportCols, ArrayList<Object> reportData) {
+ try {
+ FileWriter f = new FileWriter (filePath);
+ for (int i = 0; i < reportCols.length; i ++) {
+ f.append (escapeQuote(reportCols[i]));
+ f.append (",");
+ }
+ f.append("\n");
+ for (int i = 0; i < reportData.size(); i += reportCols.length) {
+ for (int j = 0; j < reportCols.length; j ++) {
+ f.append (escapeQuote(reportData.get(i+j)));
+ f.append (",");
+ }
+ f.append ("\n");
+ }
+ f.flush();
+ f.close();
+ return true;
+ } catch (IOException ex) {
+ Logger.getLogger(Utility.class.getName()).log(Level.SEVERE, null, ex);
+ return false;
+ }
+
+ }
+
+ private static String escapeQuote(Object bareStr) {
+ if (bareStr.getClass() == String.class) {
+ String str = (String)bareStr;
+ String escapedStr = str.replace ("\"", "\"\"");
+ System.out.println(escapedStr);
+ String finalStr = String.format ("\"%s\"", escapedStr);
+ return finalStr;
+ }
+ else
+ return String.format("\"%s\"", bareStr.toString());
+ }