/** * Process the rreturned pack documents * @access public * @author David */ public function action_pack_in_check($clientID = 0) { // -- Get the serialized documents info for checking when packs were chased // ------------------------------------------------------------------------ $savedDocuments = array(); $ppiClient = \Crm\Ppi\Ppi_class::forge((int) $clientID); $savedDocuments = $ppiClient->getPackReturnedDocuments(); $date = date("d/m/Y"); $documents = array(); $documents = array('Creditor Information' => array('Completed' => \Input::post('DOCCHECK_Creditor_Information') == 'on' ? 'Yes' : 'No', 'Chase Date' => isset($savedDocuments['Creditor Information']['Chase Date']) && $savedDocuments['Creditor Information']['Chase Date'] != '' && \Input::post('DOCCHECK_Creditor_Information') != 'on' ? $savedDocuments['Creditor Information']['Chase Date'] : (\Input::post('DOCCHECK_Creditor_Information') != 'on' ? $date : ''), 'Notes' => ''), 'LOA' => array('Completed' => \Input::post('DOCCHECK_LOA') == 'on' ? 'Yes' : 'No', 'Chase Date' => isset($savedDocuments['LOA']['Chase Date']) && $savedDocuments['LOA']['Chase Date'] != '' && \Input::post('DOCCHECK_LOA') != 'on' ? $savedDocuments['LOA']['Chase Date'] : (\Input::post('DOCCHECK_LOA') != 'on' ? $date : ''), 'Notes' => ''), 'TaC' => array('Completed' => \Input::post('DOCCHECK_TaC') == 'on' ? 'Yes' : 'No', 'Chase Date' => isset($savedDocuments['TaC']['Chase Date']) && $savedDocuments['TaC']['Chase Date'] != '' && \Input::post('DOCCHECK_TaC') != 'on' ? $savedDocuments['TaC']['Chase Date'] : (\Input::post('DOCCHECK_TaC') != 'on' ? $date : ''), 'Notes' => ''), 'Section F' => array('Completed' => \Input::post('DOCCHECK_Section_F') == 'on' ? 'Yes' : 'No', 'Chase Date' => isset($savedDocuments['Section F']['Chase Date']) && $savedDocuments['Section F']['Chase Date'] != '' && \Input::post('DOCCHECK_Section_F') != 'on' ? $savedDocuments['Section F']['Chase Date'] : (\Input::post('DOCCHECK_Section_F') != 'on' ? $date : ''), 'Notes' => '')); if ($ppiClient->pack_completed == 'no') { // -- Only process if the pack isn't completed // ------------------------------------------- // -- Save the document information back // ------------------------------------- $ppiClient->savePackReturnedDocuments($documents); $correspondence = \Crm\Ppi\Ppi_correspondence::forge((int) $clientID); $correspondenceMsg = null; // -- If any of the documents have missing infomation and it isn't currently being chased then send out a letter and paperwork, also add a new correspondence // ---------------------------------------------------------------------------------------------------------------------------------------------------------- if (\Input::post('DOCCHECK_Creditor_Information') == 'on' && \Input::post('DOCCHECK_LOA') == 'on' && \Input::post('DOCCHECK_TaC') == 'on' && \Input::post('DOCCHECK_Section_F') == 'on') { // -- All paperwork is now complete // -------------------------------- // 1) Mark the Pack as complete // 2) Create a correspondence that the pack is complete $ppiClient->setPackCompleted(); $correspondence->saveNew(0, 2, 5, 0, 'Pack Completed'); } else { $letterHead = array(); $letterBlank = array(); $missing = array(); $referralInfo = \Crm\Referrals\Referrals_class::forge((int) $correspondence->referral_id); $creditors = $referralInfo->loadData('creditors'); $letterConfig = \Crm\Ppi\Ppi_class::loadLettersList((int) $ppiClient->company_id); unset($referralInfo); // -- Missing Creditor Information // ------------------------------- if (\Input::post('DOCCHECK_Creditor_Information') != 'on' && $savedDocuments['Creditor Information']['Chase Date'] == '') { $correspondenceMsg .= 'Pack Incomplete. Missing information found on the Creditor Information Section.' . "\r\n"; $letterHead[] = array('id' => $letterConfig['missing_loa'], 'qty' => 1, 'tray_id' => 2); $letterBlank[] = array('id' => $letterConfig['ppi_form_of_authority'], 'qty' => count($creditors) > 0 ? count($creditors) : 3, 'tray_id' => 1); $missing[] = '<li>Creditor name / Account Number</li>'; } // -- Missing LOA // -------------- if (\Input::post('DOCCHECK_LOA') != 'on' && $savedDocuments['LOA']['Chase Date'] == '') { $correspondenceMsg .= 'Pack Incomplete. Missing information found on the LOA Section.' . "\r\n"; $letterHead[] = array('id' => $letterConfig['missing_loa'], 'qty' => 1, 'tray_id' => 2); $letterBlank[] = array('id' => $letterConfig['ppi_form_of_authority'], 'qty' => count($creditors) > 0 ? count($creditors) : 3, 'tray_id' => 1); $missing[] = '<li>Signed Form of Authority</li>'; } // -- Missing Terms and Conditions // ------------------------------- if (\Input::post('DOCCHECK_TaC') != 'on' && $savedDocuments['TaC']['Chase Date'] == '') { $correspondenceMsg .= 'Pack Incomplete. Missing information found on the Terms and Conditions Section.' . "\r\n"; $letterHead[] = array('id' => $letterConfig['missing_tac'], 'qty' => 1, 'tray_id' => 2); $letterBlank[] = array('id' => $letterConfig['terms_and_conditions_GAB'], 'qty' => 1, 'tray_id' => 1); $missing[] = '<li>Signed Terms and Conditions</li>'; } // -- Missing Section "F" // ---------------------- if (\Input::post('DOCCHECK_Section_F') != 'on' && $savedDocuments['Section F']['Chase Date'] == '') { $correspondenceMsg .= 'Pack Incomplete. Missing information Section F Isn\'t filled in.' . "\r\n"; $missing[] = '<li>Signed Section F</li>'; $printSectionF = true; } } } if (!is_null($correspondenceMsg)) { // -- Pack is found to be incomplete. Set correspondence and send letter out // ------------------------------------------------------------------------- $correspondence->saveNew(0, 2, 2, 0, $correspondenceMsg); if ($ppiClient->company_id == 1) { $timeSlot = 1; } else { if ($ppiClient->company_id == 3) { $timeSlot = 2; } } // -- Persolvo Letters if (count($missing) > 1) { unset($letterHead); $letterHead[] = array('id' => $letterConfig['missing_several_documents'], 'qty' => 1, 'tray_id' => 2); $extraData = array(); $freeText = ''; foreach ($missing as $missingText) { $freeText .= $missingText; } $extraData = array('freeText' => $freeText); } #if(count($letterHead) > 0) # \Crm\Letter\Pack::forge((int)$clientID,null,$letterHead)->setOutputFilename('ppi_missing_info_pack_coverletter_' . date("dmy") . '_' .(int)$clientID.'.pdf')->printLetter(2, 40)->timeSlot($timeSlot)->create(); \Crm\Letter\Letter::forge($clientID, null, $extraData)->writeContent($letterHead[0]['id'])->setOutputFilename('ppi_missing_info_pack_coverletter_' . date("dmy") . '_' . (int) $clientID . '.pdf')->printLetter($letterHead[0]['tray_id'])->timeSlot($timeSlot)->create(); if (count($letterBlank) > 0) { \Crm\Letter\Pack::forge((int) $clientID, null, $letterBlank)->setOutputFilename('ppi_missing_info_pack_' . date("dmy") . '_' . (int) $clientID . '.pdf')->printLetter(1, 40)->timeSlot($timeSlot)->create(); } if ($printSectionF == true) { \Printmanager\Queue::add(DOCROOT . 'uploads/crm/forms/section_f_form.pdf', $timeSlot == 1 ? date('Y-m-d 14:00:00') : date('Y-m-d 20:30:00'), 1); } #\Printmanager\Queue::add(DOCROOT . 'uploads/crm/forms/section_f_form.pdf', ( (int)date('H') < 14 ) ? date('Y-m-d 14:00:00') : date('Y-m-d 20:30:00'), 1); $correspondence->saveNew(0, 2, 3, 0, 'Letter Sent to Client'); } // -- If all the documents have been completed, then set the Pack Completed field as Yes // ------------------------------------------------------------------------------------- Response::redirect('crm/view_client/' . $clientID . '/'); }
/** * Create a new PPI Invoice * * @author David Stansfield * @public * @param int $clientID, int $claimID */ public function action_create_invoice() { // -- Check that one hasn't been created for this product // ------------------------------------------------------ // -- Set the POST variables // ------------------------- $clientID = \Input::post('Invoice_ClientID'); $productTypeID = \Input::post('Invoice_Product_Type_ID'); $clientProductID = \Input::post('Invoice_Client_Product_ID'); $referenceID = \Input::post('Invoice_ReferenceID'); $refundMethodID = \Input::post('Refund_Method'); $correspondence = \Crm\Ppi\Ppi_correspondence::forge((int) $clientID); if ($refundMethodID > 0) { $refundMethod = \Crm\Ppi\Ppi_class::getRefundMethod($refundMethodID); } $description = \Input::post('Invoice_Description'); $qty = \Input::post('Invoice_Qty'); $charge = \Input::post('Invoice_Charge'); $fee = \Input::post('Invoice_Fee'); $vatPc = \Input::post('VAT_Percentage'); $vat = 0; $total = 0; $feeTotal = $charge / 100 * $fee; $total = $feeTotal * $qty; $vat = $total / 100 * $vatPc; $total = $total + $vat; // -- Create the Invoice // --------------------- $details = array(); $details = array('description' => $description . (isset($refundMethod) ? ' | Chosen refund method is ' . $refundMethod : false), 'qty' => $qty, 'charge' => $charge, 'vat_pc' => $vatPc, 'vat_amount' => $vat, 'fee' => $fee, 'total' => $total); $invoiceID = \Crm\Invoice\Invoice_class::createInvoice($clientID, $productTypeID, $clientProductID, $referenceID, $details); if ($invoiceID > 0) { // -- Invoice has been created in the system, now create a Refund Method entry // --------------------------------------------------------------------------- $refundData = array('claim_id' => $referenceID, 'invoice_id' => $invoiceID, 'method_id' => 0, 'refund_amount' => $charge); if (\Crm\Ppi\Ppi_class::createRefundMethod($refundData)) { // -- Print the Invoice // -------------------- $extraData = array('date' => date("jS F Y"), 'invoiceDescription' => $description, 'invoiceQuantity' => $qty, 'invoiceCharge' => $charge, 'vatPc' => $vatPc, 'vatAmount' => $vat, 'totalGross' => $feeTotal, 'invoiceCostTotal' => $total, 'claimID' => $referenceID); $fileName = 'invoice_' . $clientID . '_' . $invoiceID . '.pdf'; \Crm\Letter\Letter::forge($clientID, null, $extraData)->writeContent(27)->setOutputFilename($fileName)->printLetter(2)->create(); // -- Save Correspondence // ---------------------- $correspondence = \Crm\Ppi\Ppi_correspondence::forge((int) $clientID); $correspondence->saveNew($referenceID, 10, 28, 0, 'Invoice #' . $invoiceID . ' Created and printed <a href="/uploads/crm/letter/' . $fileName . '" target="_blank">View Letter</a>'); // -- Save the invoice ID to the claim // ----------------------------------- $claim = \Crm\Ppi\Ppi_claims::forge($referenceID); $claim->setInvoiceID($invoiceID); $message = $invoiceID; $status = 'done'; } else { $message = 'Unable to save Refund Method'; $status = 'error'; } } else { $message = 'Unable to create a new invoice'; $status = 'error'; } $this->response(array('status' => $status, 'message' => $message)); }
public function action_view_client($clientID = 6273) { /* ** Client class now displays the client on the page ** NEEDS TO: ** * Display a list of products for the client ** * Show the status for these products ** * If we are still in 'Pack Sent' status then an icon lets us 're-send' a pack */ $this->template->title = 'View Client'; $ppiDetails = \Crm\Ppi\Ppi_class::forge($clientID); $chosenClient = \Crm\ClientClass::forge($clientID); // -- Check to see if the client has a partner saved // ------------------------------------------------- $partnerDetails = array(); if ($ppiDetails->hasPartner()) { $partner = \Crm\PartnerClass::forge($ppiDetails->partner_id); $partnerDetails = array('partnerID' => $ppiDetails->partner_id, 'title' => $partner->title, 'forename' => $partner->forename, 'surname' => $partner->surname, 'streetAndNumber' => $partner->streetAndNumber, 'area' => $partner->area, 'district' => $partner->district, 'town' => $partner->town, 'county' => $partner->county, 'postCode' => $partner->postCode, 'dateOfBirth' => $partner->dateOfBirth == "0000-00-00" ? "Not Taken" : date("d/m/Y", strtotime($partner->dateOfBirth)), 'telHome' => $partner->telHome == 0 ? "Not Taken" : "0" . $partner->telHome, 'telMobile' => $partner->telMobile == 0 ? "Not Taken" : "0" . $partner->telMobile, 'telWork' => $partner->telWork == 0 ? "Not Taken" : "0" . $partner->telWork, 'email' => $partner->email); } $referralDetails = Referrals_class::forge($ppiDetails->referral_id); $packDocuments = $ppiDetails->getPackReturnedDocuments(); $creditorList = Creditor_class::loadCreditorList(); $disposisionList = $referralDetails->loadDispositionList(); // -- Is the client Active // ----------------------- $clientProduct = \Crm\Product\Client_product_class::forge(\Crm\Product\Product_class::getClientProductID($ppiDetails->referral_id)); // -- Correspondence // ----------------- $correspondence = \Crm\Ppi\Ppi_correspondence::forge($clientID); $correspondenceList = $correspondence->getCorrespondences(5); // -- PPI Claims // ------------- $claims = \Crm\Ppi\Ppi_claims::getClaims($ppiDetails->id); $ppiStages = \Crm\Ppi\Ppi_class::listStages(); $niceCreditorList = array(); foreach ($creditorList as $creditor) { $niceCreditorList[$creditor['id']] = $creditor['name']; } // -- Get a nice Debt Type List // ---------------------------- $debtTypeList = \Crm\Ppi\Ppi_class::getDebtList(); $niceDebtTypeList = array(); foreach ($debtTypeList as $debt) { $niceDebtTypeList[$debt['id']] = $debt['description']; } $fullNoteList = $chosenClient->loadClientNotes(); // -- Letters - Chase Letter and Non Claim Letter // ---------------------------------------------- $letterConfig = \Crm\Ppi\Ppi_class::loadLettersList((int) $ppiDetails->company_id); $letters = array(); $letters[] = array('id' => $letterConfig['client_free_text'], 'details' => \Crm\Letter\Letter::letterDetails($letterConfig['client_free_text']), 'freeText' => true, 'tray' => 2); $letters[] = array('id' => $letterConfig['ppi_welcome_letter'], 'details' => \Crm\Letter\Letter::letterDetails($letterConfig['ppi_welcome_letter']), 'freeText' => false, 'tray' => 2); $letters[] = array('id' => $letterConfig['ppi_form_of_authority'], 'details' => \Crm\Letter\Letter::letterDetails($letterConfig['ppi_form_of_authority']), 'freeText' => false, 'tray' => 1); $letters[] = array('id' => $letterConfig['recommand_a_friend'], 'details' => \Crm\Letter\Letter::letterDetails($letterConfig['recommand_a_friend']), 'freeText' => false, 'tray' => 1); $letters[] = array('id' => $letterConfig['terms_and_conditions_GAB'], 'details' => \Crm\Letter\Letter::letterDetails($letterConfig['terms_and_conditions_GAB']), 'freeText' => false, 'tray' => 1); $letters[] = array('id' => $letterConfig['terms_and_conditions_CUSTOMER'], 'details' => \Crm\Letter\Letter::letterDetails($letterConfig['terms_and_conditions_CUSTOMER']), 'freeText' => false, 'tray' => 1); $letters[] = array('id' => $letterConfig['missing_loa'], 'details' => \Crm\Letter\Letter::letterDetails($letterConfig['missing_loa']), 'freeText' => false, 'tray' => 2); $letters[] = array('id' => $letterConfig['missing_tac'], 'details' => \Crm\Letter\Letter::letterDetails($letterConfig['missing_tac']), 'freeText' => false, 'tray' => 2); $letters[] = array('id' => $letterConfig['ipad_questionnaire'], 'details' => \Crm\Letter\Letter::letterDetails($letterConfig['ipad_questionnaire']), 'freeText' => false, 'tray' => 1); $letters[] = array('id' => $letterConfig['client_pack_not_returned_1'], 'details' => \Crm\Letter\Letter::letterDetails($letterConfig['client_pack_not_returned_1']), 'freeText' => false, 'tray' => 2); $letters[] = array('id' => $letterConfig['client_pack_not_returned_2'], 'details' => \Crm\Letter\Letter::letterDetails($letterConfig['client_pack_not_returned_2']), 'freeText' => false, 'tray' => 2); $letters[] = array('id' => $letterConfig['client_missing_creditor_details'], 'details' => \Crm\Letter\Letter::letterDetails($letterConfig['client_missing_creditor_details']), 'freeText' => false, 'tray' => 2); $this->template->content = View::forge(static::$_viewPath . '/view_client.php', array('productDetails' => array('ppi' => array('companyName' => $ppiDetails->company_name, 'referralID' => $ppiDetails->referral_id, 'account_created' => date("d/m/Y", strtotime($ppiDetails->account_created)), 'pack_sent_date' => $ppiDetails->pack_sent_date == "0000-00-00" ? "Not Sent" : date("d/m/Y", strtotime($ppiDetails->pack_sent_date)), 'pack_returned_date' => $ppiDetails->pack_returned_date == "0000-00-00" ? "Not Received" : date("d/m/Y", strtotime($ppiDetails->pack_returned_date)), 'hasReturnedPack' => $ppiDetails->hasResentPack())), 'isActive' => $clientProduct->status('active'), 'creditorList' => $creditorList, 'claims' => $claims, 'allCreditors' => $niceCreditorList, 'allDebtTypes' => $niceDebtTypeList, 'debtList' => $debtTypeList, 'disposisionList' => $disposisionList, 'ppiStages' => $ppiStages, 'packDocuments' => $packDocuments, 'packCompleted' => $ppiDetails->pack_completed, 'canCreateClaims' => $ppiDetails->canCreateClaims(), 'agentDetails' => $ppiDetails->getReferralAgent(), 'clientDetails' => array('clientID' => $clientID, 'title' => $chosenClient->title, 'forename' => $chosenClient->forename, 'surname' => $chosenClient->surname, 'streetAndNumber' => $chosenClient->streetAndNumber, 'area' => $chosenClient->area, 'district' => $chosenClient->district, 'town' => $chosenClient->town, 'county' => $chosenClient->county, 'postCode' => $chosenClient->postCode, 'dateOfBirth' => $chosenClient->dateOfBirth == "0000-00-00" ? "Not Taken" : date("d/m/Y", strtotime($chosenClient->dateOfBirth)), 'telHome' => $chosenClient->telHome == 0 ? "Not Taken" : "0" . $chosenClient->telHome, 'telMobile' => $chosenClient->telMobile == 0 ? "Not Taken" : "0" . $chosenClient->telMobile, 'telWork' => $chosenClient->telWork == 0 ? "Not Taken" : "0" . $chosenClient->telWork, 'email' => $chosenClient->email, 'notes' => $chosenClient->notes, 'creditors' => $referralDetails->loadData(), 'allNotes' => $fullNoteList, 'correspondences' => $correspondenceList, 'hasPartner' => $chosenClient->hasPartner()), 'partnerDetails' => $partnerDetails, 'letters' => $letters)); }