• Content count

  • Joined

  • Last visited

Everything posted by RafaelT

  1. Everything should be working now, our hosting provider was doing some quick maintenance which should not have affected anything, but it seems that the control panel was unavailable for just a few minutes.
  2. Lavu POS Video

    A quick Lavu video
  3. 3.02 Issues?

    Hi Steve, Overall we have seen a much improved experience for most customers who were having issues with syncing as they migrate to 3.0.2. Several adjustments were made in 3.0.2 related to syncing. Were all your devices on 3.0.2? Leaving one on a previous Lavu version could cause an issue. brownsadaat, We are currently looking info the issue with Heartland Giftcards. Thanks, Rafael
  4. Lavu 3.0.1?

    Hello, I did get an update today, Apple has approved the App for developer release. We make it a rule not to release at the end of the week, just in case there happen to be any issues with the update. You will most likely see 3.0.1 appear in the app store on Sunday afternoon or Monday morning. Thanks, Rafael
  5. Lavu 3.0.1?

    Hello, I will speak with development tomorrow and see if I can get an answer for you. Thanks, Rafael
  6. Thanks for the info!
  7. Hello, While there is no way to limit a checklist to a certain number of options, you could simply change it to "choice" and put it in a modifier group that loops through it 4 times, this is a pretty efficient way of handling it. Thanks, Rafael
  8. Lavu 3.0.1?

    Hey Jim, If you were to sign up as a beta tester and install 3.0.1 that is currently available through that program, it would be the same version that we have submitted to Apple for approval. We are currently waiting on Apple to approve 3.0.1, as soon as they do it will be released, I would anticipate early next week, but it could always be sooner. Additionally you can always delete the beta version and use Lavu Retro or Lavu 3.0, you are are in no way locked into the beta version. You should expect a few small releases over the coming weeks to address any issues that are found. Thanks, Rafael
  9. Strange Behaviors Today

    Hey Everyone, Lavu 3.0.1 should address a bunch of these issues. We expect this to be released soon. If you would like to try 3.0.1 now please email test@poslavu.com and sign up as a beta tester. Please also make sure the dining room auto refresh is set at 10 seconds. To keep things a bit more organized I am going to go ahead and close this topic. If you are still seeing any issues with 3.0.1 please feel free to start a new one. Thanks, Rafael
  10. Lavu 3.0 problems

    Hey Everyone, Lavu 3.0.1 should address a bunch of these issues. We expect this to be released soon. If you would like to try 3.0.1 now please email test@poslavu.com and sign up as a beta tester. Please also make sure the dining room auto refresh is set at 10 seconds. To keep things a bit more organized I am going to go ahead and close this topic. If you are still seeing any issues with 3.0.1 please feel free to start a new one. Thanks, Rafael
  11. Tableside Checkout

    Hello, I believe this issue is fixed in 3.0.1 which should be out soon. If you would like to test version 3.0.1 please email test@poslavu.com. Thanks, Rafael
  12. 3.0 is driving me crazy

    Hello, We are aware some customers are seeing issues like this, however, they are not widespread, so please contact support and provide us with as much info as you can so that we can resolve these as quickly as possible. Every example we get is helpful. Tecsol, you are correct, we did not see these issues pop up at all during beta and we ran the system in quite a few busy restaurants.... I am sure we will be able to resolve this relatively quickly. Thanks, Rafael
  13. Strange Behaviors Today

    Hello Jim, In regards to your original concerns, this is what I heard back from our QA team. 1. In advanced location settings try changing the "Seconds between Dining Room view auto refresh:" to 10. 2. I believe this may have been resolved, please let us know if you are still seeing this issue. 3. Can you please email support@poslavu.com "ATTN: Tiffany" with Order IDs of the orders that are not showing in the correct meal period. We are unable to duplicate this issue, so having a few examples would be greatly appreciated. 4. We were not able to reproduce this issue. Was the server using more than one device? Table Side  and Terminal or two different Terminals? Anymore info you can provide would be helpful. 5. Is this on the new reports or old reports? Thanks, Rafael
  14. Hey Pablo, This is probably related to a settings on your account. If the "Auto send when printing check or checking out" setting in Advanced Location Setting is set, try unchecking that and see if it resolves the issue. If you still need help the best thing to do would be to have a support agent check over your settings and if needed, do some trouble shooting. You can contact support by emailing support@poslavu.com Thanks, Rafael
  15. Lavu 3.0 problems

    Hey Michael, We have been experiencing high call volume answering questions about Lavu 3. The best way to get help right now so you are not stuck waiting on the phone would be to email support@poslavu.com with all your issues nicely documented, you can either request that they work with you via the ticket or that they give you a call back. This also allows the support agent to look into these issues and be more informed before giving you that call back. The problems you are describing are not something that most customers are experiencing. I would urge you to submit a support ticket so that we can dig into them. If you would prefer not to use Lavu 3 at this time, we have Lavu Retro available in the app store. Lavu Retro is essentially version 2.3.13, the version we released before Lavu 3. If you go this route please make sure to close out all orders in Lavu 3 and ensure that Lavu Retro is being used on all iPads, we do not recommend mixing the two version. Thanks, Rafael
  16. Hello, I had someone look into this issue and it appears that the new reports are fine, it is the older version 1 reports that have the issue, unfortunately the end of day report is one of those older reports. We should be able to have someone address this issue soon. Thanks, Rafael
  17. Hello, You are correct, the order numbers now use a prefix depending what device they were created on, so that part is behaving as intended Regarding the sorting issue, I will pass this along to our QA team to investigate. Thanks, Rafael
  18. EMV standards and Lavu integration

    Hi bohemeos, We should have more information soon regarding the availability of EMV devices with our various processors. While we absolutely plan to have EMV devices available for your preferred gateways, I'd also like you to take the following in to consideration so you can make an informed business decision. It should be noted that the below is my opinion and should not be taken as official information from Lavu. The shift to EMV is only a shift in liability for the merchant, there is nothing that says you MUST support EMV in October of 2015. For example, currently if someone clones a credit card and uses it to make a fraudulent purchase, there are some protections built in for you. After the October 2015 deadline, if the transaction is not an EMV transaction, you would be liable for the chargeback. So, this sounds bad, but in reality how many times do you have stolen cards used in your restaurant? In the four years that I owned my restaurant I had one charge back issued for $10. There is no way that the cost of the hardware and the interruption to the workflow for my servers would have been worth implementing EMV at this time. I urge everyone to do your research and understand what this really means for your business, there are a lot of people out there who would love to sell you new hardware so you are "EMV compliant", they may not be the best sources for information. I just wanted to give everyone something to think about, obviously you need to decide what is right for your business. Thanks, Rafael
  19. POS Lavu 3.0 Release Date?

    Hello, Lavu 3 has been submitted to the app store and is currently pending approval by Apple. I would anticipate that it will be out this coming week, the week after at the latest. It has been a while since our last release, Lavu 3 underwent a major under the hood redesign, incorporated a few much requested features, and addressed a number of bugs. Due to the number of core changes, this release also underwent an extensive testing / beta period. Thanks, Rafael
  20. iTouch interface customization

    ​3.0 Should be out some time in May.
  21. Below you will find some advice on upgrading POSLavu and iOS. The ideas found below should be considered for any piece of mission critical software, not just POSLavu. Upgrading to the latest version of iOS and POSLavu is always a good idea. Making sure you are running the latest version provides you with the latest features, enhancements and security updates. With that being said, you must always remember that these devices are critical to your business, this is mission critical software, care must be taken to make sure that any updates are not going to have unexpected issues that may negatively effect your operations. Both Apple and POSLavu go to great lengths to test their software before releasing it but it is impossible to catch every issues every time. Below you will find some suggestions to help you minimize any risks from upgrading. These suggestions go for POSLavu and iOS upgrades. 1. Wait. Unless you are experiencing a major issue that is fixed by the new version you should wait a few days after the release before upgrading. If any major issues do pop up you they will most likely be caught before you upgrade. 2. Install the upgrade on one device first (EX: One iPad and one iPod). Give it a once over, make sure everything seems to be working correctly. Use that device for a day or two and make sure it works as expected before upgrading your other devices. If there are any big issues you will still have your other devices functioning correctly. 3. Make sure that your staff is instructed to alert you about any problems immediately. Common sense would dictate that they would alert you to any issues... but that does not always happen. What should you do if you experience an issue after upgrading? Below you will find a few self help tips, they are not in any specific order but give you some ideas depending on what problems you are having. A. Power the device off and the back on. Sometimes a reboot is all that is needed. B. For a problem with an iOS upgrade try restoring the device and setting up as new. C. For a problem with a POSLavu upgrade try deleting the app and re installing it. D. Sometimes reloading the settings in POSLavu is all that is needed. E. Check these forums. If others are having trouble as well you may find some useful information posted. F. For a POSLavu issue submit a support ticket by going to support.poslavu.com/open.php.
  22. Below you will find a sample of code (Thanks to Troy!) that will pull information from the database in the form of a Cashiers sale report. <?php /* * Demonstration script to retrieve and present data from the POSLavu API * This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License. * To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/. * * Originally by Troy Kelly - Aperim Pty Ltd - http://aperim.com/ * Examples from services provided by posExtend - http://posextend.com/ * * Change Log * 20120915 TDK Created initial example */ ini_set("memory_limit","128M"); // Ensure we have enough memory to manage the returned XML // General Configuration Settings $config=array(); $config['reportname'] = 'Cashier Sales'; $config['timezone'] = 'America/New_York'; // POSLavu API Settings // These can be retrieved from http://admin.poslavu.com/cp/index.php?mode=api (When logged in). $arrPLAPI['url']='https://admin.poslavu.com/cp/reqserv/'; $arrPLAPI['dataname']='NAME-NAME-NAME'; $arrPLAPI['key']='KEY-KEY-KEY-KEY'; $arrPLAPI['token']='TOKEN-TOKEN-TOKEN'; $dateTime = new DateTime (date("Y-m-d H:i:s")); // POSLavu API uses non-standard date formatting $dateTime->setTimezone(new DateTimeZone($config['timezone'])); // So, we need to generate a timestamp $tmeDate = $dateTime->getTimestamp(); // to use for default processing if(isset($_REQUEST['startdate'])) $dteStart=$_REQUEST['startdate']; // Was 'startdate' supplied? If so - set it if(isset($_REQUEST['enddate'])) $dteEnd=$_REQUEST['enddate']; // Was 'enddate' supplied? If so - set it // Make sure we have a start and end date if we don't have either - set it. if(!isset($dteStart)) $dteStart=date('Y-m-01',strtotime('first day last month',$tmeDate)); if(!isset($dteEnd)) $dteEnd=date("Y-m", strtotime('first day last month',$tmeDate)).'-'.date("t", strtotime('first day last month',$tmeDate));; // The important bit - get our data our of the API // The plGetData function passes it's response to the xml => array function // Once we have our data - we can start massaging it $arrData=xmlstr_to_array(plGetData($arrPLAPI, 'orders', 'closed', NULL, $dteStart, $dteEnd, 10240)); $arrData=$arrData['row']; // All the XML data sit's under a node called "row" - so move everything "up" one.. $arrReportData=array(); $arrTableHeaders=array('Cashier','Orders','Guests','Voids','Refunds','Discount','Sub Total','Tax','Cash','Card','Gift Certs','Tips','Cash Tips','Card Tips'); $intTotalOrders =count($arrData); if ($intTotalOrders > 1) { foreach ($arrData as $item => $transaction) { $strCashierName = $transaction['cashier']; // The array stores the values under the API headings $intCashierID = $transaction['cashier_id']; $strCashierIdentifier = "$intCashierID"; if(!isset($arrReportData[$strCashierIdentifier]['Cashier'])) $arrReportData[$strCashierIdentifier]['Cashier'] = $strCashierName; $intGuests = $transaction['guests']; $blnVoided = ($transaction['voided'] == 0) ? false : true; // Not sure if this works $blnRefunded = ($transaction['refunded'] == 1) ? true : false; // Would love some API documentation $fltSubTotal = $transaction['subtotal']; $fltTotal = $transaction['total']; $fltTax = $transaction['tax']; $fltDiscount = $transaction['discount']; $fltCashAmount = $transaction['cash_paid']; $fltCardAmount = $transaction['card_paid']; $fltGiftAmount = $transaction['gift_certificate']; $fltTipAmount = $transaction['gratuity']; $fltTipCard = $transaction['card_gratuity']; $fltTipCash = $transaction['cash_tip']; $arrReportData[$strCashierIdentifier]['Orders']++; $arrReportData[$strCashierIdentifier]['Guests']=$arrReportData[$strCashierIdentifier]['Guests']+$intGuests; if($blnVoided) { $arrReportData[$strCashierIdentifier]['Voids']=$arrReportData[$strCashierIdentifier]['Voids']+$fltTotal; }elseif($blnRefunded){ $arrReportData[$strCashierIdentifier]['Refunds']=$arrReportData[$strCashierIdentifier]['Refunds']+$fltTotal; }else{ $arrReportData[$strCashierIdentifier]['Discount']=$arrReportData[$strCashierIdentifier]['Discount']+$fltDiscount; $arrReportData[$strCashierIdentifier]['Sub Total']=$arrReportData[$strCashierIdentifier]['Sub Total']+$fltSubTotal; $arrReportData[$strCashierIdentifier]['Total']=$arrReportData[$strCashierIdentifier]['Total']+$fltTotal; $arrReportData[$strCashierIdentifier]['Tax']=$arrReportData[$strCashierIdentifier]['Tax']+$fltTax; $arrReportData[$strCashierIdentifier]['Cash']=$arrReportData[$strCashierIdentifier]['Cash']+$fltCashAmount; $arrReportData[$strCashierIdentifier]['Card']=$arrReportData[$strCashierIdentifier]['Card']+$fltCardAmount; $arrReportData[$strCashierIdentifier]['Gift']=$arrReportData[$strCashierIdentifier]['Gift']+$fltGiftAmount; $arrReportData[$strCashierIdentifier]['Tips']=$arrReportData[$strCashierIdentifier]['Tips']+$fltTipAmount; $arrReportData[$strCashierIdentifier]['Cash Tips']=$arrReportData[$strCashierIdentifier]['Cash Tips']+$fltTipCard; $arrReportData[$strCashierIdentifier]['Card Tips']=$arrReportData[$strCashierIdentifier]['Card Tips']+$fltTipCash; } } } // Now we have an array with all the data, generate a table to display it and store it in a variable. $strTable=htmlTableFromArray($arrTableHeaders,$arrReportData,$config['reportname']); /* * Functions to retrieve, process and prepare data for display below. */ function plGetData($arrPLSystem, $strTable=NULL, $strColumn=NULL, $strValue=NULL, $strValueMin=NULL, $strValueMax=NULL, $intLimit=50) { if(!$arrPLSystem) return false; // If no information about the POSLavu API Connection is passed - exit if(!$strTable) return false; // If no table has been selected - exit $arrAuthData=array(); $arrControlData=array(); $arrSearchData=array(); $arrAuthData['dataname']=$arrPLSystem['dataname']; $arrAuthData['key']=$arrPLSystem['key']; $arrAuthData['token']=$arrPLSystem['token']; $arrControlData['valid_xml']='1'; $arrSearchData['table']=$strTable; if(!is_null($strColumn)) $arrSearchData['column']=$strColumn; if(!is_null($strValue)) $arrSearchData['value']=$strValue; if(!is_null($strValueMin)) $arrSearchData['value_min']=$strValueMin; if(!is_null($strValueMax)) $arrSearchData['value_max']=$strValueMax; if(!is_null($intLimit)) $arrSearchData['limit']=$intLimit; $arrPostVars=array_merge($arrAuthData,$arrControlData,$arrSearchData); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $arrPLSystem['url']); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $arrPostVars); $contents = curl_exec($ch); // The POSLavu API doesn't always returned fully formed / true XML // So, it needs to be "tidy'd" up a little // There isn't anything too amazing going on here, and TIDY (http://php.net/manual/en/book.tidy.php) // is included on nearly all PHP installs. $strFixedContents=tidyParseXML($contents); return $strFixedContents; } function xmlstr_to_array($xmlstr) { $doc = new DOMDocument(); $doc->loadXML($xmlstr); $root = $doc->documentElement; $output = domnode_to_array($root); $output['@root'] = $root->tagName; return $output; } function domnode_to_array($node) { $output = array(); switch ($node->nodeType) { case XML_CDATA_SECTION_NODE: case XML_TEXT_NODE: $output = trim($node->textContent); break; case XML_ELEMENT_NODE: for ($i=0, $m=$node->childNodes->length; $i<$m; $i++) { $child = $node->childNodes->item($i); $v = domnode_to_array($child); if(isset($child->tagName)) { $t = $child->tagName; if(!isset($output[$t])) { $output[$t] = array(); } $output[$t][] = $v; } elseif($v || $v === '0') { $output = (string) $v; } } if($node->attributes->length && !is_array($output)) { //Has attributes but isn't an array $output = array('@content'=>$output); //Change output into an array. } if(is_array($output)) { if($node->attributes->length) { $a = array(); foreach($node->attributes as $attrName => $attrNode) { $a[$attrName] = (string) $attrNode->value; } $output['@attributes'] = $a; } foreach ($output as $t => $v) { if(is_array($v) && count($v)==1 && $t!='@attributes') { if(is_array($v[0]) && count($v[0])==0){ $output[$t] = NULL; }else{ $output[$t] = $v[0]; } } } } break; } return $output; } function htmlTableFromArray($arrHeaders,$arrData,$strCaption='',$strSummary=''){ $strTable = "<table border=\"1\" cellspacing=\"2\" cellpadding=\"2\" summary=\"$strSummary\">\n"; $strTable.= "<caption>$strCaption</caption>\n"; if(count($arrHeaders)>0){ $strTable.="<tr>\n"; foreach($arrHeaders as $strHeader) { $strTable.="<th scope=\"col\">$strHeader</th>\n"; } $strTable.="</tr>"; foreach($arrData as $key => $value){ $strTable.="<tr>\n"; $blnFirstCol=true; foreach($arrHeaders as $strHeader) { if($blnFirstCol){ $strTable.="<th scope=\"row\">"; }else{ $strTable.="<td>"; } if(is_numeric($value[$strHeader])) $value[$strHeader]=number_format($value[$strHeader], 2, '.', ''); $strTable.=$value[$strHeader]; if($blnFirstCol){ $strTable.="</th>\n"; $blnFirstCol=false; }else{ $strTable.="</td>\n"; } } $strTable.="</tr>\n"; } } $strTable.= "</table>\n"; return $strTable; } function tidyParseXML($strStringToClean, $arrTidyConfig=NULL){ $arrDefaultConfig = array( 'input-xml' => true, 'show-body-only' => false, 'clean' => true, 'char-encoding' => 'utf8', 'add-xml-decl' => true, 'add-xml-space' => true, 'output-html' => false, 'output-xml' => true, 'output-xhtml' => false, 'numeric-entities' => false, 'ascii-chars' => false, 'doctype' => 'strict', 'bare' => true, 'fix-uri' => true, 'indent' => true, 'indent-spaces' => 4, 'tab-size' => 4, 'wrap-attributes' => true, 'wrap' => 0, 'indent-attributes' => true, 'join-classes' => false, 'join-styles' => false, 'enclose-block-text' => true, 'fix-bad-comments' => true, 'fix-backslash' => true, 'replace-color' => false, 'wrap-asp' => false, 'wrap-jste' => false, 'wrap-php' => false, 'write-back' => true, 'drop-proprietary-attributes' => false, 'hide-comments' => false, 'hide-endtags' => false, 'literal-attributes' => false, 'drop-empty-paras' => true, 'enclose-text' => true, 'quote-ampersand' => true, 'quote-marks' => false, 'quote-nbsp' => true, 'vertical-space' => true, 'wrap-script-literals' => false, 'tidy-mark' => true, 'merge-divs' => false, 'repeated-attributes' => 'keep-last', 'break-before-br' => true, ); if(!is_array($arrTidyConfig)) { $arrTidyConfig = &$arrDefaultConfig; } $tidy = new tidy(); $strReturn = $tidy->repairString($strStringToClean, $arrTidyConfig, 'UTF8'); unset($tidy); unset($arrTidyConfig); return($strReturn); } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title><?php print $config['reportname']; ?></title> </head> <body> <?php print $strTable; ?> </body> </html> [/CODE] Click here to view the entry
  23. Hi everyone, As several users have brought up, 2.0.9 disables the audio jack. This is related to upcoming credit card integration. If you need this feature then I would hold off on upgrading to iOS6 / 2.0.9 for the time being. There have been a bunch of topics on this in the last couple days. Support is aware that there are people who would like this feature back, there is nothing else that can be done on the forums here so I do ask that no new topics be posted about it. Please call POS Lavu support directly if you would like to discuss this further.
  24. Modifier Groups

    Here is a quick tutorial on modifier groups, you will see that if you do it this way it will greatly cut down on detours, it also allows you to recycle more forced mods (at least in my case) because they can be used in different places where a detour might make them item specific. Menu Item - Your looking at pancakes, you can see pancakes is using "Group: B - PC" Mod Group - This is the group I created that contains a few forced modifiers. Forced Mods - These are the different forced mods that go into the mod group. (note that if needed the detours still function but play a smaller roll, for example I could add a detour on those pancake add in's asking if the want them on top or inside, even after that detour it would continue to the next item in the modifier group)
  25. We are excited to announce that Lavu Community is now Talk Lavu! Talk Lavu connects Lavu clients with one another to offer support, ideas, and tips. Talk Lavu is also a great place to receive help from Lavu Staff and Specialists. Looking to purchase Lavu? Post your questions in the pre-sales forum. Have Lavu installed in your restaurant? Show off your setup by uploading pictures to the new gallery. We have a couple new exciting features to better get your questions answered and to let us know what is important to you. A new question and answer mode in the "Lavu Point Of Sale Support" and "toGO ~ KDS ~ LLS ~ Pilot" forum to make sure your question gets answered.A new topic rating system in the feature request forum so we know what is important to you.We hope everyone enjoys the new and improved Talk Lavu - Lavu