Archive

Archive for the ‘Open Source’ Category

InvoicePlane v1.4.10 – Enabling Date Parameters

November 29, 2016 Leave a comment

As an update to https://jefferytay.wordpress.com/2016/02/25/invoiceplaneenabling-date-parameters/

File: Application\helpers\pdf_helper.php
Action:
Replace
    $items = $CI->mdl_items->where(‘invoice_id’, $invoice_id)->get()->result();   
with
    $items = $CI->mdl_items->get_items_and_replace_vars($invoice_id, $invoice->invoice_date_due);

image

File: application\modules\guest\controllers\view.php
Action:
Replace
    ‘items’ => $this->mdl_items->where(‘invoice_id’, $invoice->invoice_id)->get()->result(),
with
    ‘items’ => $this->mdl_items->get_items_and_replace_vars($invoice->invoice_id, $invoice->invoice_date_due),

image

File: application\modules\invoices\models\mdl_items.php
Action:
Add the following lines after "class Mdl_Items extends Response_Model {"

    ///Modify – ADDED
    public function get_items_and_replace_vars($invoice_id, $invoice_date_created = ‘now’)
    {
         $items = array();
         $query = $this->where(‘invoice_id’, $invoice_id)->get();

         foreach($query->result() as $item) {
             $item->item_name = $this->parse_item($item->item_name, $invoice_date_created);
             $item->item_description = $this->parse_item($item->item_description, $invoice_date_created);
             $items[] = $item;
         }
         return $items;
    }

    //Modify – ADDED
    private function parse_item($string, $invoice_date_created)
    {
        if (preg_match_all(‘/{{{(?<format>[yYmMdD])(?:(?<=[Yy])ear|(?<=[Mm])onth|(?<=[Dd])ay)(?:(?<operation>[-+])(?<amount>[1-9]+))?}}}/m’, $string, $template_vars, PREG_SET_ORDER)) {
              try {
                $formattedDate = new DateTime($invoice_date_created);
              }
              catch(Exception $e) { // If creating a date based on the invoice_date_created isn’t possible, use current date
                $formattedDate = new DateTime();
              }

              /* Calculate the date first, before starting replacing the variables */
              foreach($template_vars as $var) {
                  if(!isset($var[‘operation’], $var[‘amount’])) continue;

                  if($var[‘operation’] == ‘-‘) {
                      $formattedDate->sub( new DateInterval(‘P’ . $var[‘amount’] . strtoupper($var[‘format’])) );
                  }
                  else if($var[‘operation’] == ‘+’) {
                      $formattedDate->add( new DateInterval(‘P’ . $var[‘amount’] . strtoupper($var[‘format’])) );
                  }
              }

              /* Let’s replace all variables */
              foreach($template_vars as $var) {
                  $string = str_replace($var[0], $formattedDate->format($var[‘format’]), $string);
              }
        }

        return $string;
    }

image

Categories: Invoice Plane, Open Source

Universal SMS Archiver

May 13, 2016 Leave a comment

Users who have been using Android devices will swear by SMS Backup and Restore to backup their SMS, while iOS users have iTunes backup. While these works, one issue with such software is that you generally do not want to keep or transfer all of your old SMS into the new device.

Introducing Universal SMS Archiver!

  • It is a desktop app that runs on Windows, and has the ability to automatically import your SMS from iTunes and SMS Backup and Restore files.
  • You can also manage the entire list of SMS into a current as well as archived list.
  • It has the ability to export your current sms list into Excel for further processing

image

The latest executable can be downloaded at https://onedrive.live.com/redir?resid=895931B65435BB3D!30467&authkey=!AG-VaHLPBh10qLg&ithint=file%2czip

Source code can be found at https://github.com/kwanann/Hobbies/tree/master/Universal%20SMS%20Archiver

Easy way to IMAP sync 2 mailboxes

February 2, 2016 Leave a comment

Linux has a great tool to sync 2 different mailboxes, this is especially useful when you need to migrate from one mailbox to another

  1. First install imapsync
  2. Then run the following command

imapsync –host1 –user1 –password1 –host2 [destination server] –user2 [destination email] –password2 [destination password]

Categories: CentOS, Open Source, Ubuntu

Selenium WebDriver – Element is not clickable at point

February 2, 2016 Leave a comment

Selenium is a fantastic tool for website automation, you simply nuget it into your .NET project and you will be able to use it to automate testing using Firefox

Nuget link: https://www.nuget.org/packages/Selenium.WebDriver

 

However, if you are upgrading from versions < 2.48 to the latest version, you will realize that a lot of your codes will suddenly throw the following error

OpenQA.Selenium.WebDriverException: Unexpected error. Element is not clickable at point (x, y). Other element would receive the click:

at OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)

 

This is due to the way Selenium handles Mouse Clicks from version 2.48 onwards, version 2.50 is the currently “safer” version to use

https://github.com/SeleniumHQ/selenium/issues/1202

image

 

Of course all of these does not fix the issues you have with the code, here are some possible ways to fix them

#1: Use SendKeys

SendKeys automatically focuses to the element that it needs to send keys to, however this is restricted to input elements

e.g Element.SendKeys(Keys.Escape)

 

#2 Use MoveToElement

MoveToElement is another way to move focus to the element.

e.g new OpenQA.Selenium.Interactions.Actions(driver).MoveToElement(elem).Perform();

#3 Use Javascript

Javascript allows you to pretty much do anything

e.g. ((IJavaScriptExecutor)driver).ExecuteScript("window.scrollTo(" + elem.Location.X + "," + elem.Location.Y + ")")

 

#4 Use ScrollIntoView

ScrollIntoView is another  possible javascript that you can use

((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].scrollIntoView(true);", element);

InvoicePlane–Enabling friendly filenames when downloading PDF

January 29, 2016 Leave a comment

Modify /application/helpers/mpdf_helper.pdf       

Look for this particular code segment

if (!empty($invoice_array) AND $isGuest) {
            rsort($invoice_array);
            header(‘Content-type: application/pdf’);
return readfile($invoice_array[0]);       

 

then modify it to

if (!empty($invoice_array) AND $isGuest) {
            rsort($invoice_array);
            header(‘Content-type: application/pdf’);
header(‘Content-Disposition: attachment; filename="’.basename($invoice_array[0]).’"’); //<– add this line
return readfile($invoice_array[0]);       

Categories: Invoice Plane, Open Source

InvoicePlane–Adding custom recurring periods

January 29, 2016 Leave a comment

By default, invoice plans comes with recurring periods up to 1 year. However sometimes you need to add in additional recurring periods

To do so, you will need to edit 2 files

File #1: application\modules\invoices\models\mdl_invoices_recurring.php

Look for $recur_frequencies and then add in the periods you want e.g in this example, I added in 2, 3,4 and 5 years

image

File #2: application\language\english\custom_lang.php

You will need to map each of the values with an appropriate language value, e.g in this case 2_year maps to the phrase 2 Years

If you support more than the english language, you will need to do the same for the additional language

image

Categories: Invoice Plane, Open Source