SliQ Invoicing Plus V5 Released

Version 5 of SliQ Invoicing Plus has been released. This is a major new version of SliQ Invoicing Plus and is released almost two years after V4. Over 100 additions and modifications have been included in version 5 based on feedback from customers.

The top user-requested features included in V5 are a built-in spellchecker when editing invoices and a stock control system for tracking stock level and helping automate raising orders for low stock items. V5 now also includes the ability to define HTML email templates, allowing users to add logos and formatted signatures to emails sent from SliQ, e.g. when emailing invoices to customers.

A number of smaller features have been added to increase flexibility, e.g. it is now possible to automatically insert date information into line item descriptions on recurring invoices. In V5 it is also possible to configure the date ranges used on ageing reports on statements to bring them in line with invoice payment terms if desired.

Existing customers can upgrade from any earlier version of SliQ Invoicing at the reduced upgrade price shown on our sales page. Any purchaser of V5 will be able to download any updated V5 release, e.g. 5.1, 5.2 etc. will be free updates for those who have already bought V5.

To find out more about the changes in V5, see our Release History page.

How to Capture a Screenshot and Send it via Email

There are many ways to capture a screenshot, save the captured image to disk and then attach it to an email. Some versions of Windows come with built-in image capture tools such as the Snipping Tool in Windows 7.

Another alternative is to use SliQ Screen Capture. This is a free, very simple tool from SliQTools that provides easy options for capturing screenshots of your complete desktop, the current application running in Windows or even a control within an application. By default, when a screenshot is captured, SliQ Screen Capture opens the captured image in Microsoft Paint. In later versions, Microsoft Paint includes a Send in e-mail option that quickly allows you attach the image to an email.

If you want to use SliQ Screen Capture to send a screenshot by email, take these steps:

1. Download and install SliQ Screen Capture from this page:

http://www.sliqtools.co.uk/screen-capture-utility.aspx

2. Run SliQ Screen Capture.

SliQ Screen Capture always sits on top of all other windows. You can still work with other applications but SliQ Screen Capture stays visible so you can click on one of its capture image buttons.

3. Click on the window of which you want take an image.

For example, if you want to take a screenshot of a window in SliQ Invoicing, click on the window in SliQ Invoicing Plus with your mouse.

4. In SliQ Screen Capture, press the Capture Foreground Window button.

The button is highlighted with a red square in the following picture.

capture-foreground-window-as-image

Then wait for Microsoft Paint to launch.

5. In Microsoft Paint, open the File menu and choose the Send in email option.

paint-send-in-email-file-menu

A new email window should then open with the captured image attached.

6. Edit the email as normal – enter the email address you want to send the picture to, the subject and email message – and press the Send button to send the email.

If you are looking for help on taking a screenshot on an Apple Mac, see this blog post: http://www.sliqtools.co.uk/blog/apple-mac/apple-mac-how-to-take-a-screenshot/

SQL Server Express: Login failed for user X: Error 18456

After creating a new SQL server login with a password in SQL Server Management Studio and then adding a user with the same name as the login to a database, I was having a lot of trouble getting my code first entity framework model to connect to the database. Every time I tried to specify the connection for a context then get a list of objects from the context, I got a SQL exception indicating that the login/ password did not work and could not be logged into the database.

After some research, I found that by default SQL Express only works with Windows Authentication for logins and you have to configure the server to work with both Windows Authentication and SQL Server logins with passwords. To access the configuration setting, right-click the topmost tree node (the server name) in SQL Server Management Studio and show the Server Properties.

In the Server Properties dialog, click the Security settings node in the Select a page panel, then under the Server authentication settings, check the SQL Server and Windows Authentication mode. Then press OK to close the dialog.

sql-server-properties

To get SQL Server Express to pick up the new setting you need to stop and start the server. To do this, again right-click the server name in SQL Server Management Studio and choose Restart from the popup menu. OK and dialogs that come up asking for permission to restart the server. You should then be able to create a connection string to use with an entity framework context using the server name, login/ user id and password you have set. The connection string will be of the form:

Data Source=<server name>;Database=<Database name>;User Id=<Login>;Password=<Password>

Configuring Email Read Receipt Options in Outlook

Microsoft Outlook allows you to configure options for how read receipt requests are handled. When you receive an email for which the sender has requested a read receipt you can configure Outlook to ignore the read receipt request, always automatically send a read receipt or ask you email by email whether to respond with a receipt or not.

To configure the read receipt options, choose the Options option in the Tools menu.

The, in the Outlook Options dialog, choose the Email Options … button near the top of the Preferences tab.

outlook-email-options

In the Options dialog, then press the Tracking Options … button.outlook-email-tracking-options

Finally, in the Tracking Options dialog, choose the desired option before pressing the OK button.

outlook-ask-for-read-receipt

For more Outlook tips, see Configuring the Default Email Account in Microsoft Outlook.

ASP.NET MVC : Accessing String Resources in CSHTML files

When writing web pages in ASP.NET MVC, the standard way of outputting label names is often unsatisfactory as you end up with a label that follows a variable name, e.g. including a line like:

@Html.LabelFor(model => model.PadNumberLength)

ends up showing a label:

PadNumberLength

where you really want:

Pad Number Length

There are a number of other ways of changing the label, e.g. you could put a DisplayName attribute on the property in the model, e.g.

[DisplayName("Pad Number Length")]
public int PadNumberLength { get; set; }

However, especially if you have come to ASP.NET MVC programming from a desktop environment such as Winforms or WPF, the most natural way to get a label name is from a resource file. This also makes it easier to localise your pages in the future.

An ASP.NET MVC project contains a Resources file under the Properties node in the solution explorer. You can put all your string resources in this file. To access the resources in a CSHTML file, include the following HTML helper in your solution:

public static MvcHtmlString ResourceString<T>
    (this HtmlHelper<T> html, string ResourceName)
{
    var Manager = new ResourceManager(typeof(Properties.Resources));
    return MvcHtmlString.Create(Manager.GetString(ResourceName));
}

This means you can then write labels such as:

<label>@Html.ResourceString("PAD_NUMBER_LENGTH")</label>

that output the resource strings from your Properties.Resources file.

Easy Way of Examining Exception Details in Visual Studio

When an exception is raised while debugging an application in Visual Studio, a dialog like the following appears showing a number of options to get more detail on the exception, e.g. the stack trace and line number on which the exception occurred:

One way of digging into the exception to find out more details is to click on the View Detail … link in the dialog. This shows a watch window like view that lets you tunnel into the exception fields.

However, an easy way of scanning all the exception details, is to click the Copy exception detail to the clipboard option, then paste the copied data into Notepad. You then get all the available exception details in a form you can easily scroll through or even search.

WHY BOTHER WITH PURCHASE ORDERS?

Firstly what IS a purchase order?

 

It’s a wripo imagetten record of types, quantities, and agreed prices of any goods or services that you buy in for your business from external suppliers.

When the supplier accepts the purchase order, it forms a contract between you. This means clarity for both you as the buyer and the supplier as seller because:

You, the buyer have clearly and specifically communicated your requirements and intention to buy

The seller is then protected in terms of recouping money owed for goods or services supplied.

 

Here’s 5 good reasons to use them:

1. You are organised – instead of trying to remember phone conversations or search through various emails, both you and your supplier can find all the details relating to your purchase in one document such as prices, quantities, contact details and delivery address etc.

2. More efficient – especially if you have electronic versions of your purchase orders, you can easily manage your expenditure on your computer rather than rifling through reams of paperwork, which may or may not have been filed in the right place!

3. Avoid mistakes! There should be minimal mix ups or misunderstandings relating to what you ordered or the prices agreed if it’s all there in writing for everyone to see. It’s a legally binding document.

4. Easily keep track of orders – as each purchase order has a unique number, your supplier can quote this number on their delivery note so you can match up the goods with your order when you receive them.

5. Keep in control of your accounts – you will have the figures for all your purchase expenditure at your finger tips. If you use accounting software, you can transfer this information into your accounts at the click of a mouse. This will help you be in control of the money which has gone and is due out of your business and help keep on top of cashflow.

The example above, illustrates the kind of information you should include on your purchase orders. You can create your own templates or use simple accounting software to automatically create and edit your purchase orders.

Give Your Promotions A Lift!

 elevator-upPromotions, marketing, advertising, selling – they’re all about the same thing: getting your  message across.

 The easiest way to start promoting your business is to create your LIFT SPEECH. Have you heard of this? A LIFT SPEECH (or elevator speech) is another name for a concise description of you and your business. The idea is that when you first meet someone, you have a very short amount of time, say 10-15 seconds,  in which to tell them about your business and hopefully interest them in what you do. So, it’s the equivalent of meeting someone in a lift and making an impact in the time it takes to travel between floors. No pressure then!

 If you take a little time to plan what to say in advance, you can reap the benefits over and over again. You can also use the description in written form for your website, social media and advertisements.

 Here’s the key things to include in your LIFT SPEECH:

 1. Your name

2. Your business name

3. Where you’re based

(this can often be left until later depending on the situation. It may be relevant to mention if you are at a local meeting or if overseas, to mention your business base country)

 4. What You Offer

Don’t get bogged down in details of the features of your product or service. The key thing is you are just giving a brief summary, allowing the other person to ask you for a card or more information if they’re interested. Also try and think of what you do solely in terms of how it can benefit the listener. This will need to be tailored according to the situation and type of audience. In a business networking environment, bear in mind that the main concerns that business managers have are:

  • How to save money
  • How to increase income
  • How to save time

 Frame your description with these things in mind.

 So, an example for an invoicing software product might be: “Helping small businesses sort out their finances simply and quickly.”

 When you’ve had a go at writing yours. Try reading it and asking “so what?”. This sounds quite harsh but it’s a good way to guage whether the content of your speech will strike a chord with it’s relevance.

 

5. Engaging ending

A great way to end with impact is to ask the other person an open question (ie. not one that requires a yes or no answer). The obvious is “and what do you do?” but if you’re at an event you can also ask what they hope to get out of the meeting, or what they are interested in. Hopefully the conversation will flow and you and your business will have created an impression.

Here’s some other tips for getting your LIFT SPEECH right:

  • Stick to the KISS rule – “keep it simple stupid!”. Make every word count. No waffling or you’ll lose people’s attention. Being concise will portray your competence. And short statements have much more oomph. Aim to keep it to 20 seconds maximum length.
  • When delivering your lift speech, be confident and speak clearly. It helps to have a positive, upbeat tone and convey your passion for what you offer. Couple this with sincerity to create a good impression.
  • Make eye contact with the other person. Also keep an eye out for their body language. You may pick up signs that they’re interested in a particular point you’ve made and you can then follow this up with them.

Please feel free to share your LIFT SPEECHES here and let us know what works for you.

Overloading Functions in Javascript

Javascript does not support the kind of function overloading you find in languages such as C#. For example in C# you can define two version of a function:

// Double a value.
int DoubleAValue(int Value)
{
...

and

// Double a value, but let the user choose only to double
// if the value is greater than 10.
int DoubleAValue(int Value, bool IfGreaterThan10)
{

You can’t do this kind of overloading in Javascript, but a similar capability can be implemented by exploiting the fact that Javascript doesn’t force callers to specify values for all arguments to a function.

So to implement a kind of overloading, you could write your function in Javascript as:

function DoubleAValue(Value, IfGreaterThan10)
{
...

and callers could decide to call the function with or without the second argument:

var Result = DoubleAValue(10);

and

var Result = DoubleAValue(x, true);

To support the optional argument though, the coder has to implement the function to allow for the second argument not to be specified. There is no way to give a default value to the second argument so the function has to check if the argument is present when called. To do this the function can check whether the argument is undefined …

function DoubleAValue(Value, IfGreaterThan10)
{
    var LocalIfGreaterThan10 = true;

    if (typeof IfGreaterThan10 != 'undefined') {
        // The argument is present on this call. Take the value from the argument.
        LocalIfGreaterThan10 = IfGreaterThan10;
    }

    if (Value <= 10 || LocalIfGreaterThan10) {
        Value = Value * 2;
    }

    return Value;
}

For more Javascript help and tips, see: http://www.sliqtools.co.uk/blog/javascript/writing-javascript-objects-and-adding-element-event-handlers/

How to Fix a Hacked Website – Hacked by r00t3xpl0i7

Coming back to one of my WordPress blogs at the weekend I had a nasty surprise. The website was showing the page below indicating that the site had been hacked.

hackedwebsite

To try and see how this could have happened, I attempted to log into the wordpress admin account by going to the URL: www dot mydomain dot com/wp-admin/. What was really surprising was that I could not log in as admin even though the correct WordPress login page was still visible in the wp-admin subfolder.

Fortunately, I was able to log in to the cPanel for the site through the hosting company’s main website and using the File Manager in cPanel, I began to look for any suspicious files or changes.  As I was unable to log in to the WordPress site, I knew I also had to check the passwords in the WordPress MySQL database.

To correct the password, I opened up the WordPress MySQL database using PHPMyAdmin and looked at the admin password and email address in the wp_users table. I found that the email address wasn’t mine – it had been changed. I edited the email address back to mine using PHPMyAdmin and cleared the password field:

wordpress-wpusers

I then went back to the WordPress login page on my site (www dot mydomain dot com/wp-admin/) and clicked the Forgot password link and followed the instructions to set a new password. To be on the safe side I set a very strong password. Having done that I could then login OK to the WordPress control panel.

However at this point, the website was still showing the hacked page. Going back to File Manager in cPanel and looking through the PHP files, I found that the index.php of the WordPress theme (in the wp-content/themes/theme name/ folder had a very recent modified date. Opening up the index.php for viewing showed that the file had been overwritten and now contained PHP to show the hacked page. Unhacking the site was then easy – I logged into the WordPress control panel and switched themes – the site was then back fully functioning. To be on the safe side, I deleted the hacked theme in the WordPress control panel. At this point I’m assuming the hack was due to a weakness in the PHP for the WordPress theme as the password was pretty obscure. However, I’ll be monitoring the WordPress blog to see if the site goes down again.