Merge branch 'master' of gitlab.com:jankstudio/resq into 229-create-test-scripts

This commit is contained in:
Korina Cordero 2019-09-20 03:05:03 +00:00
commit 3e54220ecf
34 changed files with 534 additions and 24 deletions

View file

@ -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 );
}
}

View file

@ -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;
}
}

View file

@ -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
View file

@ -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",

View file

@ -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

View file

@ -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

View file

@ -0,0 +1,6 @@
framework:
default_locale: en
translator:
default_path: '%kernel.project_dir%/translations'
fallbacks:
- en

View file

@ -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]

View file

@ -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]

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

View file

@ -49,7 +49,7 @@ use App\Entity\PrivacyPolicy;
use DateTime;
use Exception;
// mobile API
class APIController extends Controller
{
protected $session;

View 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);
}
}

View file

@ -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.');
}
}

View file

@ -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

View file

@ -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);

View file

@ -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;
}
}

View file

@ -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;

View file

@ -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;
}
}

View file

@ -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;
}
}

View file

@ -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"
},

View file

@ -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") }} &copy; Motolite Res-Q
{{ "now"|date("Y") }} &copy; {% trans %}copyright{% endtrans %}
</span>
</div>
<div class="m-stack__item m-stack__item--right m-stack__item--middle m-stack__item--first">

View file

@ -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 }}">

View file

@ -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>

View file

@ -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">

View file

@ -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>

View 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
View file

View 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

View 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

View 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