Merge branch 'master' of gitlab.com:jankstudio/resq into 229-create-test-scripts
This commit is contained in:
commit
3e54220ecf
34 changed files with 534 additions and 24 deletions
|
|
@ -80,6 +80,14 @@ class TestAPICommand extends Command
|
|||
];
|
||||
$api->post('/capi/warranties/'. $id, $params);
|
||||
|
||||
// warranty set privacy policy
|
||||
$id = 86811;
|
||||
$policy_id = 2;
|
||||
$params = [
|
||||
'privacy_policy_id' => $policy_id,
|
||||
];
|
||||
$api->post('/capi/warranties/' . $id .'/privacypolicy', $params);
|
||||
|
||||
// warranty claim
|
||||
$id = 86811;
|
||||
$serial = 'AJ34LJADR12134LKJL5';
|
||||
|
|
@ -107,5 +115,9 @@ class TestAPICommand extends Command
|
|||
// vehicle
|
||||
$api->get('/capi/vehicle_manufacturers');
|
||||
$api->get('/capi/vehicles');
|
||||
|
||||
// privacy policy
|
||||
$privacy_policy_id = 2;
|
||||
$api->get('/capi/privacy_policy/' . $privacy_policy_id );
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,7 +24,8 @@ abstract class APIController extends Controller
|
|||
else
|
||||
{
|
||||
$check = $req->request->get($param);
|
||||
if (empty($check))
|
||||
//if (empty($check))
|
||||
if (!isset($check))
|
||||
$missing[] = $param;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@
|
|||
"symfony/orm-pack": "^1.0",
|
||||
"symfony/profiler-pack": "^1.0",
|
||||
"symfony/security-bundle": "^4.0",
|
||||
"symfony/translation": "^4.0",
|
||||
"symfony/twig-bundle": "^4.0",
|
||||
"symfony/validator": "^4.0",
|
||||
"symfony/yaml": "^4.0"
|
||||
|
|
|
|||
78
composer.lock
generated
78
composer.lock
generated
|
|
@ -4,7 +4,7 @@
|
|||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "60a481bcfc7c5465c831c26c20d2d7f6",
|
||||
"content-hash": "ef9a215401e1fec51336e1d6a9df52d9",
|
||||
"packages": [
|
||||
{
|
||||
"name": "catalyst/auth-bundle",
|
||||
|
|
@ -4517,6 +4517,82 @@
|
|||
"homepage": "https://symfony.com",
|
||||
"time": "2019-05-27T08:16:38+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/translation",
|
||||
"version": "v4.3.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/translation.git",
|
||||
"reference": "4e3e39cc485304f807622bdc64938e4633396406"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/translation/zipball/4e3e39cc485304f807622bdc64938e4633396406",
|
||||
"reference": "4e3e39cc485304f807622bdc64938e4633396406",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.1.3",
|
||||
"symfony/polyfill-mbstring": "~1.0",
|
||||
"symfony/translation-contracts": "^1.1.2"
|
||||
},
|
||||
"conflict": {
|
||||
"symfony/config": "<3.4",
|
||||
"symfony/dependency-injection": "<3.4",
|
||||
"symfony/yaml": "<3.4"
|
||||
},
|
||||
"provide": {
|
||||
"symfony/translation-implementation": "1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"psr/log": "~1.0",
|
||||
"symfony/config": "~3.4|~4.0",
|
||||
"symfony/console": "~3.4|~4.0",
|
||||
"symfony/dependency-injection": "~3.4|~4.0",
|
||||
"symfony/finder": "~2.8|~3.0|~4.0",
|
||||
"symfony/http-kernel": "~3.4|~4.0",
|
||||
"symfony/intl": "~3.4|~4.0",
|
||||
"symfony/service-contracts": "^1.1.2",
|
||||
"symfony/var-dumper": "~3.4|~4.0",
|
||||
"symfony/yaml": "~3.4|~4.0"
|
||||
},
|
||||
"suggest": {
|
||||
"psr/log-implementation": "To use logging capability in translator",
|
||||
"symfony/config": "",
|
||||
"symfony/yaml": ""
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "4.3-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Symfony\\Component\\Translation\\": ""
|
||||
},
|
||||
"exclude-from-classmap": [
|
||||
"/Tests/"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Fabien Potencier",
|
||||
"email": "fabien@symfony.com"
|
||||
},
|
||||
{
|
||||
"name": "Symfony Community",
|
||||
"homepage": "https://symfony.com/contributors"
|
||||
}
|
||||
],
|
||||
"description": "Symfony Translation Component",
|
||||
"homepage": "https://symfony.com",
|
||||
"time": "2019-07-18T10:34:59+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/translation-contracts",
|
||||
"version": "v1.1.2",
|
||||
|
|
|
|||
|
|
@ -292,6 +292,8 @@ access_keys:
|
|||
label: Battery Conflict Report
|
||||
- id: report.popapp.comparison
|
||||
label: Popapp Comparison Report
|
||||
- id: report.meh.customer
|
||||
label: RESQ MEH Customer Report
|
||||
|
||||
- id: service
|
||||
label: Other Services
|
||||
|
|
|
|||
|
|
@ -18,6 +18,8 @@ access_keys:
|
|||
label: Cancel
|
||||
- id: warranty.delete
|
||||
label: Delete
|
||||
- id: warranty.set.privacypolicy
|
||||
label: Set Privacy Policy
|
||||
- id: batterybrand
|
||||
label: Battery Brand Access
|
||||
acls:
|
||||
|
|
@ -43,3 +45,8 @@ access_keys:
|
|||
acls:
|
||||
- id: vehicle.list
|
||||
label: List
|
||||
- id: privacypolicy
|
||||
label: Privacy Policy
|
||||
acls:
|
||||
- id: privacypolicy.find
|
||||
label: Find Privacy Policy
|
||||
|
|
|
|||
6
config/packages/translation.yaml
Normal file
6
config/packages/translation.yaml
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
framework:
|
||||
default_locale: en
|
||||
translator:
|
||||
default_path: '%kernel.project_dir%/translations'
|
||||
fallbacks:
|
||||
- en
|
||||
|
|
@ -102,6 +102,12 @@ capi_warranty_delete:
|
|||
controller: App\Controller\CAPI\WarrantyController::delete
|
||||
methods: [POST]
|
||||
|
||||
# set privacy policy of warranty
|
||||
capi_warranty_privacy_policy:
|
||||
path: /capi/warranties/{id}/privacypolicy
|
||||
controller: App\Controller\CAPI\WarrantyController::setPrivacyPolicy
|
||||
methods: [POST]
|
||||
|
||||
# customer vehicle api
|
||||
|
||||
# find customer vehicle by id
|
||||
|
|
@ -121,3 +127,11 @@ capi_cv_register:
|
|||
path: /capi/customer_vehicle
|
||||
controller: App\Controller\CAPI\CustomerVehicle::register
|
||||
methods: [POST]
|
||||
|
||||
# privacy policy
|
||||
|
||||
# get privacy policy by id
|
||||
capi_privacy_policy:
|
||||
path: /capi/privacy_policy/{id}
|
||||
controller: App\Controller\CAPI\PrivacyPolicyController::getPrivacyPolicy
|
||||
methods: [GET]
|
||||
|
|
|
|||
|
|
@ -37,3 +37,13 @@ rep_popapp_export_csv:
|
|||
path: /report/popapp_export
|
||||
controller: App\Controller\ReportController::popappExportCSV
|
||||
methods: [POST]
|
||||
|
||||
rep_resq_meh_form:
|
||||
path: /report/meh_customer
|
||||
controller: App\Controller\ReportController::mehCustomerForm
|
||||
methods: [GET]
|
||||
|
||||
rep_resq_meh_export_csv:
|
||||
path: /report/meh_customer_export
|
||||
controller: App\Controller\ReportController::mehCustomerExportCSV
|
||||
methods: [POST]
|
||||
|
|
|
|||
BIN
public/moogle-assets/74fdd1d049be99432a128ee40e93bff7.png
Executable file
BIN
public/moogle-assets/74fdd1d049be99432a128ee40e93bff7.png
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 44 KiB |
BIN
public/moogle-assets/moogle_face_icon.ico
Executable file
BIN
public/moogle-assets/moogle_face_icon.ico
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 106 KiB |
BIN
public/moogle-assets/moogleicon.ico
Executable file
BIN
public/moogle-assets/moogleicon.ico
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 101 KiB |
BIN
public/moogle-assets/stuffed_animal_moogle.ico
Executable file
BIN
public/moogle-assets/stuffed_animal_moogle.ico
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 95 KiB |
BIN
public/moogle-assets/yellow_moogle.ico
Executable file
BIN
public/moogle-assets/yellow_moogle.ico
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 126 KiB |
|
|
@ -49,7 +49,7 @@ use App\Entity\PrivacyPolicy;
|
|||
use DateTime;
|
||||
use Exception;
|
||||
|
||||
|
||||
// mobile API
|
||||
class APIController extends Controller
|
||||
{
|
||||
protected $session;
|
||||
|
|
|
|||
43
src/Controller/CAPI/PrivacyPolicyController.php
Normal file
43
src/Controller/CAPI/PrivacyPolicyController.php
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
<?php
|
||||
|
||||
namespace App\Controller\CAPI;
|
||||
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Doctrine\ORM\Query;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Doctrine\DBAL\Exception\UniqueConstraintViolationException;
|
||||
use Catalyst\APIBundle\Controller\APIController;
|
||||
use Catalyst\APIBundle\Response\APIResponse;
|
||||
|
||||
use App\Entity\PrivacyPolicy;
|
||||
|
||||
use Catalyst\APIBundle\Access\Generator as ACLGenerator;
|
||||
|
||||
// third party API
|
||||
class PrivacyPolicyController extends APIController
|
||||
{
|
||||
protected $acl_gen;
|
||||
|
||||
public function __construct(ACLGenerator $acl_gen)
|
||||
{
|
||||
$this->acl_gen = $acl_gen;
|
||||
}
|
||||
|
||||
public function getPrivacyPolicy($id, EntityManagerInterface $em)
|
||||
{
|
||||
$this->denyAccessUnlessGranted('privacypolicy.find', null, 'No access.');
|
||||
|
||||
$privacy_policy = $em->getRepository(PrivacyPolicy::class)->find($id);
|
||||
|
||||
if ($privacy_policy == null)
|
||||
return new APIResponse(false, 'No privacy policy found with that number.', null, 404);
|
||||
|
||||
$data = [
|
||||
'privacy_policy' => (string) $privacy_policy->getContent(),
|
||||
];
|
||||
|
||||
return new APIResponse(true, 'Privacy policy found.', $data);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -16,6 +16,7 @@ use App\Entity\BatterySize;
|
|||
use App\Entity\SAPBattery;
|
||||
use App\Entity\SAPBatterySize;
|
||||
use App\Entity\SAPBatteryBrand;
|
||||
use App\Entity\PrivacyPolicy;
|
||||
|
||||
use App\Ramcar\NameValue;
|
||||
use App\Ramcar\WarrantyClass;
|
||||
|
|
@ -24,6 +25,7 @@ use DateTime;
|
|||
|
||||
use Catalyst\APIBundle\Access\Generator as ACLGenerator;
|
||||
|
||||
// third party API
|
||||
class WarrantyController extends APIController
|
||||
{
|
||||
protected $acl_gen;
|
||||
|
|
@ -445,4 +447,50 @@ class WarrantyController extends APIController
|
|||
|
||||
return new APIResponse(true, 'Warranty deleted successfully.');
|
||||
}
|
||||
|
||||
public function setPrivacyPolicy(Request $req, EntityManagerInterface $em, $id)
|
||||
{
|
||||
$this->denyAccessUnlessGranted('warranty.set.privacypolicy', null, 'No access.');
|
||||
|
||||
// find warranty
|
||||
$warr = $em->getRepository(Warranty::class)->find($id);
|
||||
if ($warr == null)
|
||||
{
|
||||
return new APIResponse(false, 'No warranty found with that id.', null, 404);
|
||||
}
|
||||
|
||||
$params = [
|
||||
'privacy_policy_id',
|
||||
];
|
||||
|
||||
$msg = $this->checkRequiredParameters($req, $params);
|
||||
error_log('msg - ' . $msg);
|
||||
if ($msg)
|
||||
return new APIResponse(false, $msg);
|
||||
|
||||
$privacy_policy_id = $req->request->get('privacy_policy_id');
|
||||
|
||||
if ($privacy_policy_id == 0)
|
||||
{
|
||||
$warr->setPrivacyPolicy(null);
|
||||
}
|
||||
else
|
||||
{
|
||||
// find privacy policy
|
||||
$privacy_policy = $em->getRepository(PrivacyPolicy::class)->find($privacy_policy_id);
|
||||
if ($privacy_policy == null)
|
||||
{
|
||||
return new APIResponse(false, 'No privacy policy found with that id.', null, 404);
|
||||
}
|
||||
|
||||
// set privacy policy of warranty
|
||||
$warr->setPrivacyPolicy($privacy_policy);
|
||||
}
|
||||
|
||||
$em->persist($warr);
|
||||
$em->flush();
|
||||
|
||||
return new APIResponse(true, 'Privacy policy for warranty set successfully.');
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@ use Symfony\Component\HttpFoundation\Request;
|
|||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\Validator\Validator\ValidatorInterface;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
||||
use Symfony\Contracts\Translation\TranslatorInterface;
|
||||
|
||||
use Catalyst\MenuBundle\Annotation\Menu;
|
||||
|
||||
|
|
@ -1918,7 +1919,7 @@ class JobOrderController extends Controller
|
|||
}
|
||||
|
||||
|
||||
public function pdfForm(Request $req, $id)
|
||||
public function pdfForm(Request $req, $id, TranslatorInterface $translator)
|
||||
{
|
||||
$this->denyAccessUnlessGranted('jo_pdf.list', null, 'No access.');
|
||||
|
||||
|
|
@ -1934,10 +1935,14 @@ class JobOrderController extends Controller
|
|||
// set output filename
|
||||
$filename = 'job-order-' . $obj->getID() . '.pdf';
|
||||
|
||||
// translate the title and the logo for the pdf
|
||||
$translated_title = $translator->trans('jo_title_pdf');
|
||||
$translated_logo = $translator->trans('image_jo_pdf');
|
||||
|
||||
// generate the pdf
|
||||
$pdf = new FPDF('P', 'mm', 'letter');
|
||||
$pdf->AddPage();
|
||||
$pdf->SetTitle('Motolite Res-Q Job Order #' . $obj->getID());
|
||||
$pdf->setTitle($translated_title . ' #' . $obj->getID());
|
||||
$pdf->SetFillColor(211, 211, 211);
|
||||
|
||||
// style defaults
|
||||
|
|
@ -1957,7 +1962,7 @@ class JobOrderController extends Controller
|
|||
$val_width = 60;
|
||||
|
||||
// insert the logo
|
||||
$image_path = $this->get('kernel')->getProjectDir() . '/public/assets/images/logo-resq.png';
|
||||
$image_path = $this->get('kernel')->getProjectDir() . $translated_logo;
|
||||
$pdf->Image($image_path, $col1_x, 10);
|
||||
|
||||
// insert JO number
|
||||
|
|
|
|||
|
|
@ -205,7 +205,8 @@ class PrivacyPolicyController extends Controller
|
|||
throw $this->createNotFoundException('The item does not exist');
|
||||
|
||||
// set and save values
|
||||
$row->setName($req->request->get('name'));
|
||||
$row->setName($req->request->get('name'))
|
||||
->setContent($req->request->get('content'));
|
||||
|
||||
// validate
|
||||
$errors = $validator->validate($row);
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ use App\Entity\JobOrder;
|
|||
use App\Entity\Warranty;
|
||||
use App\Entity\CustomerVehicle;
|
||||
use App\Entity\MobileSession;
|
||||
use App\Entity\Customer;
|
||||
|
||||
use Doctrine\ORM\Query;
|
||||
use Doctrine\ORM\QueryBuilder;
|
||||
|
|
@ -26,6 +27,7 @@ use Symfony\Component\HttpFoundation\File\UploadedFile;
|
|||
use Symfony\Component\Security\Core\Encoder\EncoderFactoryInterface;
|
||||
use Symfony\Component\Validator\Validator\ValidatorInterface;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
||||
use Symfony\Component\Dotenv\Dotenv;
|
||||
|
||||
use Catalyst\MenuBundle\Annotation\Menu;
|
||||
|
||||
|
|
@ -494,6 +496,56 @@ class ReportController extends Controller
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* @Menu(selected="outlet_list")
|
||||
*/
|
||||
public function mehCustomerForm()
|
||||
{
|
||||
$this->denyAccessUnlessGranted('report.meh.customer', null, 'No access.');
|
||||
$params['mode'] = 'form';
|
||||
|
||||
return $this->render('report/meh/form.html.twig', $params);
|
||||
}
|
||||
|
||||
/**
|
||||
* @Menu(selected="outlet_list")
|
||||
*/
|
||||
public function mehCustomerExportCSV(Request $req, EntityManagerInterface $em)
|
||||
{
|
||||
$data = $this->getMEHCustomerData($em);
|
||||
|
||||
$resp = new StreamedResponse();
|
||||
$resp->setCallback(function() use ($data) {
|
||||
// csv output
|
||||
$csv_handle = fopen('php://output', 'w+');
|
||||
fputcsv($csv_handle, [
|
||||
'Last Name',
|
||||
'First Name',
|
||||
'Mobile Number',
|
||||
'Landline Number',
|
||||
'Office Number',
|
||||
'Fax Number',
|
||||
'Plate Number',
|
||||
'Date Mobile App Downloaded',
|
||||
'Mobile Number Using Mobile App',
|
||||
]);
|
||||
foreach ($data as $row)
|
||||
{
|
||||
fputcsv($csv_handle, $row);
|
||||
}
|
||||
|
||||
fclose($csv_handle);
|
||||
});
|
||||
|
||||
$filename = 'resq_meh_customer_report' . '.csv';
|
||||
|
||||
$resp->setStatusCode(200);
|
||||
$resp->headers->set('Content-Type', 'text/csv; charset=utf-8');
|
||||
$resp->headers->set('Content-Disposition', 'attachment; filename="' . $filename . '"');
|
||||
|
||||
return $resp;
|
||||
}
|
||||
|
||||
protected function processPopappFile(UploadedFile $csv_file, EntityManagerInterface $em)
|
||||
{
|
||||
// attempt to open file
|
||||
|
|
@ -620,4 +672,53 @@ class ReportController extends Controller
|
|||
return $results;
|
||||
}
|
||||
|
||||
protected function getMEHCustomerData(EntityManagerInterface $em)
|
||||
{
|
||||
$results = [];
|
||||
|
||||
$conn = $em->getConnection();
|
||||
$sql = 'SELECT c.id, c.last_name, c.first_name, c.phone_mobile, c.phone_landline,
|
||||
c.phone_office, c.phone_fax,
|
||||
cv.plate_number, jo.source
|
||||
FROM job_order jo, customer_vehicle cv, customer c
|
||||
WHERE c.id = cv.customer_id
|
||||
AND jo.cvehicle_id = cv.id
|
||||
AND c.policy_mobile_app_id IS NOT NULL
|
||||
AND jo.source != :source';
|
||||
|
||||
$stmt = $conn->prepare($sql);
|
||||
$stmt->execute(array('source' => 'mobile_app'));
|
||||
|
||||
$query_results = $stmt->fetchAll();
|
||||
|
||||
foreach($query_results as $row)
|
||||
{
|
||||
$mobile_date = '';
|
||||
$mobile_number = '';
|
||||
|
||||
$mobile_session = $em->getRepository(MobileSession::class)
|
||||
->findOneBy(['customer' => $row['id']], ['date_generated' => 'ASC']);
|
||||
if ($mobile_session != null)
|
||||
{
|
||||
$mobile_date = $mobile_session->getDateGenerated()->format("d M Y");
|
||||
$mobile_number = $mobile_session->getPhoneNumber();
|
||||
}
|
||||
|
||||
$results[] = [
|
||||
'last_name' => $row['last_name'],
|
||||
'first_name' => $row['first_name'],
|
||||
'cust_mobile_number' => $row['phone_mobile'],
|
||||
'landline_number' => $row['phone_landline'],
|
||||
'office_number' => $row['phone_office'],
|
||||
'fax_number' => $row['phone_fax'],
|
||||
'plate_number' => $row['plate_number'],
|
||||
'date_mobile' => $mobile_date,
|
||||
'mobile_number' => $mobile_number,
|
||||
];
|
||||
|
||||
}
|
||||
|
||||
return $results;
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
namespace App\Entity;
|
||||
|
||||
use Doctrine\ORM\Mapping as ORM;
|
||||
use Doctrine\Common\Collections\ArrayCollection;
|
||||
|
||||
use Symfony\Component\Validator\Constraints as Assert;
|
||||
use DateTime;
|
||||
|
|
@ -119,6 +120,8 @@ class CustomerVehicle
|
|||
public function __construct()
|
||||
{
|
||||
$this->flag_active = true;
|
||||
|
||||
$this->job_orders = new ArrayCollection();
|
||||
}
|
||||
|
||||
public function getID()
|
||||
|
|
@ -256,6 +259,11 @@ class CustomerVehicle
|
|||
return $this->curr_battery;
|
||||
}
|
||||
|
||||
public function getJobOrders()
|
||||
{
|
||||
return $this->job_orders;
|
||||
}
|
||||
|
||||
public function setHasMotoliteBattery($flag_motolite_battery = true)
|
||||
{
|
||||
$this->flag_motolite_battery = $flag_motolite_battery;
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
namespace App\Entity;
|
||||
|
||||
use Doctrine\ORM\Mapping as ORM;
|
||||
use Doctrine\Common\Collections\ArrayCollection;
|
||||
use Symfony\Component\Validator\Constraints as Assert;
|
||||
|
||||
/**
|
||||
|
|
@ -22,6 +23,7 @@ class PrivacyPolicy
|
|||
// name
|
||||
/**
|
||||
* @ORM\Column(type="string", length=80)
|
||||
* @Assert\NotBlank()
|
||||
*/
|
||||
protected $name;
|
||||
|
||||
|
|
@ -48,6 +50,16 @@ class PrivacyPolicy
|
|||
*/
|
||||
protected $cust_promo;
|
||||
|
||||
/**
|
||||
* @ORM\OneToMany(targetEntity="Warranty", mappedBy="privacy_policy")
|
||||
*/
|
||||
protected $warranties;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->warranties = new ArrayCollection();
|
||||
}
|
||||
|
||||
public function getID()
|
||||
{
|
||||
return $this->id;
|
||||
|
|
@ -108,9 +120,15 @@ class PrivacyPolicy
|
|||
return $this->cust_promo;
|
||||
}
|
||||
|
||||
public function addWarranty(Warranty $warranty)
|
||||
{
|
||||
$this->warranties[] = $warranty;
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public function getWarrantiess()
|
||||
{
|
||||
return $this->warranties;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -127,6 +127,13 @@ class Warranty
|
|||
*/
|
||||
protected $flag_activated;
|
||||
|
||||
// privacy policy
|
||||
/**
|
||||
* @ORM\ManyToOne(targetEntity="PrivacyPolicy", inversedBy="warranties")
|
||||
* @ORM\JoinColumn(name="warranty_privacy_policy", referencedColumnName="id", nullable=true)
|
||||
*/
|
||||
protected $privacy_policy;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->date_create = new DateTime();
|
||||
|
|
@ -366,4 +373,24 @@ class Warranty
|
|||
{
|
||||
return $this->flag_activated;
|
||||
}
|
||||
|
||||
public function hasPrivacyPolicy()
|
||||
{
|
||||
if ($this->privacy_policy == null)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function setPrivacyPolicy($privacy_policy)
|
||||
{
|
||||
$this->privacy_policy = $privacy_policy;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getPrivacyPolicy()
|
||||
{
|
||||
return $this->privacy_policy;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
13
symfony.lock
13
symfony.lock
|
|
@ -293,6 +293,19 @@
|
|||
"symfony/thanks": {
|
||||
"version": "v1.1.0"
|
||||
},
|
||||
"symfony/translation": {
|
||||
"version": "3.3",
|
||||
"recipe": {
|
||||
"repo": "github.com/symfony/recipes",
|
||||
"branch": "master",
|
||||
"version": "3.3",
|
||||
"ref": "2ad9d2545bce8ca1a863e50e92141f0b9d87ffcd"
|
||||
},
|
||||
"files": [
|
||||
"config/packages/translation.yaml",
|
||||
"translations/.gitignore"
|
||||
]
|
||||
},
|
||||
"symfony/translation-contracts": {
|
||||
"version": "v1.1.2"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
<!-- begin::Head -->
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>{% block title %}Motolite Res-Q{% endblock %}</title>
|
||||
<title>{% block title %}{% trans %}block_title{% endtrans %}{% endblock %}</title>
|
||||
|
||||
<!--begin::Web font -->
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/webfont/1.6.16/webfont.js"></script>
|
||||
|
|
@ -29,8 +29,8 @@
|
|||
<!--end::Base Styles -->
|
||||
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/assets/images/favicon/apple-touch-icon.png">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="/assets/images/favicon/favicon-32x32.png">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/assets/images/favicon/favicon-16x16.png">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="{% trans %}icon_base_32x32{% endtrans %}">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="{% trans %}icon_base_16x16{% endtrans %}">
|
||||
<link rel="manifest" href="/assets/images/favicon/manifest.json">
|
||||
<meta name="theme-color" content="#ffffff">
|
||||
|
||||
|
|
@ -52,7 +52,7 @@
|
|||
<div class="m-stack m-stack--ver m-stack--general">
|
||||
<div class="m-stack__item m-stack__item--middle m-brand__logo">
|
||||
<a href="{{ path('home') }}" class="m-brand__logo-wrapper">
|
||||
<img alt="Motolite" src="/assets/images/logo-motolite.png"/>
|
||||
<img alt="{% trans %}alt_image_dashboard{% endtrans %}" src="{% trans %}image_dashboard{% endtrans %}"/>
|
||||
</a>
|
||||
</div>
|
||||
<div class="m-stack__item m-stack__item--middle m-brand__tools">
|
||||
|
|
@ -157,6 +157,14 @@
|
|||
Popapp Comparison Report
|
||||
</span>
|
||||
</a>
|
||||
<a href="{{ url('rep_resq_meh_form') }}" class="m-menu__link">
|
||||
<i class="m-menu__link-bullet m-menu__link-bullet--dot">
|
||||
<span></span>
|
||||
</i>
|
||||
<span class="m-menu__link-text">
|
||||
RESQ MEH Customer Report
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
|
@ -668,7 +676,7 @@
|
|||
<div class="m-stack m-stack--flex-tablet-and-mobile m-stack--ver m-stack--desktop">
|
||||
<div class="m-stack__item m-stack__item--left m-stack__item--middle m-stack__item--last">
|
||||
<span class="m-footer__copyright">
|
||||
{{ "now"|date("Y") }} © Motolite Res-Q
|
||||
{{ "now"|date("Y") }} © {% trans %}copyright{% endtrans %}
|
||||
</span>
|
||||
</div>
|
||||
<div class="m-stack__item m-stack__item--right m-stack__item--middle m-stack__item--first">
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@
|
|||
</div>
|
||||
<div class="form-group m-form__group row no-border">
|
||||
<label class="col-lg-3 col-form-label" data-field="name">
|
||||
Trade-in Motolite
|
||||
{% trans %}battery_size_tradein_brand{% endtrans %}
|
||||
</label>
|
||||
<div class="col-lg-9">
|
||||
<input type="text" name="tip_motolite" class="form-control m-input" value="{{ obj.getTIPriceMotolite }}">
|
||||
|
|
@ -55,7 +55,7 @@
|
|||
</div>
|
||||
<div class="form-group m-form__group row no-border">
|
||||
<label class="col-lg-3 col-form-label" data-field="tip_premium">
|
||||
Trade-in Premium
|
||||
{% trans %}battery_size_tradein_premium{% endtrans %}
|
||||
</label>
|
||||
<div class="col-lg-9">
|
||||
<input type="text" name="tip_premium" class="form-control m-input" value="{{ obj.getTIPricePremium }}">
|
||||
|
|
@ -64,7 +64,7 @@
|
|||
</div>
|
||||
<div class="form-group m-form__group row no-border">
|
||||
<label class="col-lg-3 col-form-label" data-field="tip_other">
|
||||
Trade-in Other
|
||||
{% trans %}battery_size_tradein_other{% endtrans %}
|
||||
</label>
|
||||
<div class="col-lg-9">
|
||||
<input type="text" name="tip_other" class="form-control m-input" value="{{ obj.getTIPriceOther }}">
|
||||
|
|
|
|||
|
|
@ -375,7 +375,7 @@
|
|||
<span class="m-switch m-switch--icon block-switch">
|
||||
<label>
|
||||
<input type="checkbox" name="flag_motolite_battery" id="flag-motolite-battery" value="1">
|
||||
<label class="switch-label">This vehicle is using a Motolite battery</label>
|
||||
<label class="switch-label">{% trans %}add_cust_vehicle_battery_info{% endtrans %}</label>
|
||||
<span></span>
|
||||
</label>
|
||||
</span>
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>
|
||||
Motolite Res-Q | Login
|
||||
{% trans %}title_login{% endtrans %}
|
||||
</title>
|
||||
<meta name="description" content="Latest updates and statistic charts">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
|
|
@ -24,7 +24,7 @@
|
|||
<link href="/assets/vendors/base/vendors.bundle.css" rel="stylesheet" type="text/css" />
|
||||
<link href="/assets/demo/default/base/style.bundle.css" rel="stylesheet" type="text/css" />
|
||||
<!--end::Base Styles -->
|
||||
<link rel="shortcut icon" href="/assets/demo/default/media/img/logo/favicon.ico" />
|
||||
<link rel="shortcut icon" href="{% trans %}icon_login{% endtrans %}" />
|
||||
</head>
|
||||
<!-- end::Head -->
|
||||
<!-- end::Body -->
|
||||
|
|
@ -36,13 +36,13 @@
|
|||
<div class="m-login__container">
|
||||
<div class="m-login__logo">
|
||||
<a href="#">
|
||||
<img alt="Res-Q" src="/assets/images/logo-resq.png">
|
||||
<img alt="{% trans %}alt_image_logo_login{% endtrans %}" src="{% trans %}image_logo_login{% endtrans %}">
|
||||
</a>
|
||||
</div>
|
||||
<div class="m-login__signin">
|
||||
<div class="m-login__head">
|
||||
<h3 class="m-login__title">
|
||||
Sign-in to Control Panel
|
||||
{% trans %}control_panel_sign_in{% endtrans %}
|
||||
</h3>
|
||||
</div>
|
||||
<form class="m-login__form m-form" action="{{ path('login') }}" method="post">
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@
|
|||
<label data-field="content">
|
||||
Content
|
||||
</label>
|
||||
<textarea name="content" class="form-control m-input" data-name="content" rows="4">{{ obj.getContent() }}</textarea>
|
||||
<textarea name="content" class="form-control m-input" data-name="content" rows="50">{{ obj.getContent() }}</textarea>
|
||||
<div class="form-control-feedback hide" data-field="content"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
50
templates/report/meh/form.html.twig
Normal file
50
templates/report/meh/form.html.twig
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
{% extends 'base.html.twig' %}
|
||||
|
||||
{% block body %}
|
||||
<!-- BEGIN: Subheader -->
|
||||
<div class="m-subheader">
|
||||
<div class="d-flex align-items-center">
|
||||
<div class="mr-auto">
|
||||
<h3 class="m-subheader__title">
|
||||
RESQ MEH Customer Report
|
||||
</h3>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- END: Subheader -->
|
||||
<div class="m-content">
|
||||
<!--Begin::Section-->
|
||||
<div class="row">
|
||||
<div class="col-xl-6">
|
||||
<div class="m-portlet m-portlet--mobile">
|
||||
<div class="m-portlet__head">
|
||||
<div class="m-portlet__head-caption">
|
||||
<div class="m-portlet__head-title">
|
||||
<span class="m-portlet__head-icon">
|
||||
<i class="fa fa-upload"></i>
|
||||
</span>
|
||||
<h3 class="m-portlet__head-text">
|
||||
Generate Customer CSV File
|
||||
</h3>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<form id="upload_form" class="m-form m-form--fit m-form--label-align-right m-form--group-seperator-dashed" method="post" action="{{ url('rep_resq_meh_export_csv') }}" enctype="multipart/form-data">
|
||||
<div class="m-portlet__body">
|
||||
<div class="m-portlet__foot m-portlet__foot--fit">
|
||||
<div class="m-form__actions m-form__actions--solid m-form__actions--right">
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<button type="submit" class="btn btn-success">Export to CSV</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
0
translations/.gitignore
vendored
Normal file
0
translations/.gitignore
vendored
Normal file
20
translations/messages.en.yaml
Normal file
20
translations/messages.en.yaml
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
# text
|
||||
title_login: Motolite Res-Q | Login
|
||||
block_title: Motolite Res-Q
|
||||
control_panel_sign_in: Sign-in to Control Panel
|
||||
alt_image_logo_login: Res-Q
|
||||
alt_image_dashboard: Motolite
|
||||
copyright: Motolite Res-Q
|
||||
battery_size_tradein_brand: Trade-in Motolite
|
||||
battery_size_tradein_premium: Trade-in Premium
|
||||
battery_size_tradein_other: Trade-in Other
|
||||
add_cust_vehicle_battery_info: This vehicle is using a Motolite battery
|
||||
jo_title_pdf: Motolite Res-Q Job Order
|
||||
|
||||
# # images
|
||||
image_logo_login: /assets/images/logo-resq.png
|
||||
icon_login: /assets/demo/default/media/img/logo/favicon.ico
|
||||
icon_base_32x32: /assets/images/favicon/favicon-32x32.png
|
||||
icon_base_16x16: /assets/images/favicon/favicon-16x16.png
|
||||
image_dashboard: /assets/images/logo-motolite.png
|
||||
image_jo_pdf: /public/assets/images/logo-resq.png
|
||||
19
translations/moogle.en.yaml
Normal file
19
translations/moogle.en.yaml
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# text
|
||||
title_login: Moogle Test | Login
|
||||
block_title: Moogle Test
|
||||
control_panel_sign_in: Moogle Test
|
||||
alt_image_logo_login: Moogle
|
||||
alt_image_dashboard: Moogle
|
||||
copyright: Mognet Central
|
||||
battery_size_tradein_brand: Trade-in Moogle
|
||||
battery_size_tradein_premium: Trade-in Mog
|
||||
battery_size_tradein_other: Trade-in Kupo
|
||||
add_cust_vehicle_battery_info: This vehicle is using a Moogle battery
|
||||
jo_title_pdf: Moogle Job Order
|
||||
|
||||
# images
|
||||
image_logo_login: /moogle-assets/74fdd1d049be99432a128ee40e93bff7.png
|
||||
icon_login: /moogle-assets/moogleicon.ico
|
||||
icon_base: /moogle-assets/moogleicon.ico
|
||||
image_dashboard: /moogle-assets/yello_moogle.ico
|
||||
image_jo_pdf: /public/moogle-assets/74fdd1d049be99432a128ee40e93bff7.png
|
||||
20
translations/resq.messages.en.yaml
Normal file
20
translations/resq.messages.en.yaml
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
# text
|
||||
title_login: Motolite Res-Q | Login
|
||||
block_title: Motolite Res-Q
|
||||
control_panel_sign_in: Sign-in to Control Panel
|
||||
alt_image_logo_login: Res-Q
|
||||
alt_image_dashboard: Motolite
|
||||
copyright: Motolite Res-Q
|
||||
battery_size_tradein_brand: Trade-in Motolite
|
||||
battery_size_tradein_premium: Trade-in Premium
|
||||
battery_size_tradein_other: Trade-in Other
|
||||
add_cust_vehicle_battery_info: This vehicle is using a Motolite battery
|
||||
jo_title_pdf: Motolite Res-Q Job Order
|
||||
|
||||
# images
|
||||
image_logo_login: /assets/images/logo-resq.png
|
||||
icon_login: /assets/demo/default/media/img/logo/favicon.ico
|
||||
icon_base_32x32: /assets/images/favicon/favicon-32x32.png
|
||||
icon_base_16x16: /assets/images/favicon/favicon-16x16.png
|
||||
image_dashboard: /assets/images/logo-motolite.png
|
||||
image_jo_pdf: /public/assets/images/logo-resq.png
|
||||
Loading…
Reference in a new issue