Add job source to api user. #737

This commit is contained in:
Korina Cordero 2023-02-13 09:00:58 +00:00
parent 0a2bc1741b
commit f8da38fd26
7 changed files with 131 additions and 21 deletions

View file

@ -65,6 +65,13 @@ class User extends BaseUser
*/
protected $metadata;
// third party job order source linked to api_user
/**
* @ORM\ManyToOne(targetEntity="App\Entity\JobOrderSource", inversedBy="api_users")
* @ORM\JoinColumn(name="source_id", referencedColumnName="id")
*/
protected $source;
public function __construct()
{
parent::__construct();
@ -76,6 +83,8 @@ class User extends BaseUser
// set date created
$this->date_create = new DateTime();
$this->metadata = [];
$this->source = null;
}
public function getID()
@ -182,5 +191,17 @@ class User extends BaseUser
{
return $this->rider;
}
public function setSource($source = null)
{
$this->source = $source;
return $this;
}
public function getSource()
{
return $this->source;
}
}

View file

@ -15,6 +15,7 @@ use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Catalyst\MenuBundle\Annotation\Menu;
use App\Entity\Rider;
use App\Entity\JobOrderSource;
class APIUserController extends Controller
{
@ -138,6 +139,7 @@ class APIUserController extends Controller
$em = $this->getDoctrine()->getManager();
$params['roles'] = $em->getRepository(APIRole::class)->findAll();
$params['riders'] = $em->getRepository(Rider::class)->findBy([], ['first_name' => 'asc']);
$params['sources'] = $em->getRepository(JobOrderSource::class)->findBy([], ['name' => 'asc']);
// response
return $this->render('api-user/form.html.twig', $params);
@ -166,6 +168,15 @@ class APIUserController extends Controller
->setMetadata($meta);
}
// source, if any
$source_id = $req->request->get('source_id', '');
if (!empty($source_id))
{
$source = $em->getRepository(JobOrderSource::class)->find($source_id);
if ($source != null)
$obj->setSource($source);
}
// set and save values
$obj->setName($req->request->get('name'))
->setEnabled($req->request->get('enabled') ? true : false)
@ -239,6 +250,7 @@ class APIUserController extends Controller
// get roles
$params['roles'] = $em->getRepository(APIRole::class)->findAll();
$params['riders'] = $em->getRepository(Rider::class)->findBy([], ['first_name' => 'asc']);
$params['sources'] = $em->getRepository(JobOrderSource::class)->findBy([], ['name' => 'asc']);
$params['obj'] = $obj;
@ -260,15 +272,34 @@ class APIUserController extends Controller
// set and save values
// metadata
$rider_id = $req->request->get('rider_id');
$rider = $em->getRepository(Rider::class)->find($rider_id);
// TODO: check for null rider
$rider_id = $req->request->get('rider_id', '');
$rider = null;
if (!empty($rider_id))
{
$rider = $em->getRepository(Rider::class)->find($rider_id);
if ($rider != null)
{
// set api user in rider
$rider->setAPIUser($obj);
}
}
$meta = $obj->getMetadata();
$meta['rider_id'] = $rider_id;
// set api user in rider
$rider->setAPIUser($obj);
// source, if any
$source_id = $req->request->get('source_id', '');
if (!empty($source_id))
{
$source = $em->getRepository(JobOrderSource::class)->find($source_id);
if ($source != null)
$obj->setSource($source);
}
else
{
// reset source to null, if source was removed from api_user
$obj->setSource();
}
$obj->setName($req->request->get('name'))
->setEnabled($req->request->get('enabled') ? true : false)

View file

@ -88,7 +88,7 @@ class JobOrderSourceController extends Controller
foreach ($obj_rows as $orow) {
// add row data
$row['id'] = $orow->getID();
$row['source_id'] = $orow->getSourceID();
$row['name'] = $orow->getName();
// add row metadata
$row['meta'] = [
@ -240,14 +240,15 @@ class JobOrderSourceController extends Controller
protected function setObject(JobOrderSource $obj, Request $req)
{
// set and save values
$obj->setSourceID($req->request->get('source_id'))
$obj->setCode($req->request->get('code'))
->setName($req->request->get('name'))
->setCallbackURL($req->request->get('callback_url'));
}
protected function setQueryFilters($datatable, QueryBuilder $query)
{
if (isset($datatable['query']['data-rows-search']) && !empty($datatable['query']['data-rows-search'])) {
$query->where('q.source_id LIKE :filter')
$query->where('q.name LIKE :filter')
->setParameter('filter', '%' . $datatable['query']['data-rows-search'] . '%');
}
}

View file

@ -3,6 +3,9 @@
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\Validator\Constraints as Assert;
/**
@ -24,7 +27,13 @@ class JobOrderSource
* @ORM\Column(type="string", length=80, unique=true)
* @Assert\NotBlank()
*/
protected $source_id;
protected $code;
/**
* @ORM\Column(type="string", length=80)
* @Assert\NotBlank()
*/
protected $name;
// callback URL
/**
@ -32,10 +41,19 @@ class JobOrderSource
*/
protected $callback_url;
// one job order source can be associated to many api_users
/**
* @ORM\OneToMany(targetEntity="Catalyst\APIBundle\Entity\User", mappedBy="source")
*/
protected $api_users;
public function __construct()
{
$this->source_id = '';
$this->code = '';
$this->name = '';
$this->callback_url = '';
$this->api_users = new ArrayCollection();
}
public function getID()
@ -43,15 +61,26 @@ class JobOrderSource
return $this->id;
}
public function setSourceID($source_id)
public function setCode($code)
{
$this->source_id = $source_id;
$this->code = $code;
return $this;
}
public function getSourceID()
public function getCode()
{
return $this->source_id;
return $this->code;
}
public function setName($name)
{
$this->name = $name;
return $this;
}
public function getName()
{
return $this->name;
}
public function setCallbackURL($callback_url)
@ -64,5 +93,10 @@ class JobOrderSource
{
return $this->callback_url;
}
public function getApiUsers()
{
return $this->api_users;
}
}

View file

@ -45,6 +45,20 @@
</div>
</div>
</div>
<div class="form-group m-form__group row no-border">
<div class="col-lg-8">
<label data-field="source">
Source
</label>
<select class="form-control m-input" id="source_id" name="source_id">
<option value=""></option>
{% for source in sources %}
<option value="{{ source.getID }}"{{ source.getID == obj.getSource.getID|default(0) ? ' selected' }}>{{ source.getName }}</option>
{% endfor %}
</select>
<div class="form-control-feedback hide" data-field="source_id"></div>
</div>
</div>
<div class="form-group m-form__group row no-border">
<div class="col-lg-8">
<label data-field="brand">

View file

@ -24,7 +24,7 @@
<h3 class="m-portlet__head-text">
{% if mode == 'update' %}
Edit Job Order Source
<small>{{ jo_source.getSourceID() }}</small>
<small>{{ jo_source.getName }}</small>
{% else %}
New Job Order Source
{% endif %}
@ -35,12 +35,21 @@
<form id="row-form" class="m-form m-form--fit m-form--label-align-right m-form--group-seperator-dashed" method="post" action="{{ mode == 'update' ? url('job_order_source_update_submit', {'id': jo_source.getId()}) : url('job_order_source_add_submit') }}">
<div class="m-portlet__body">
<div class="form-group m-form__group row no-border">
<label class="col-lg-3 col-form-label" data-field="source_id">
Source ID:
<label class="col-lg-3 col-form-label" data-field="code">
Code:
</label>
<div class="col-lg-9">
<input type="text" name="source_id" class="form-control m-input" value="{{ jo_source.getSourceID() }}">
<div class="form-control-feedback hide" data-field="source_id"></div>
<input type="text" name="code" class="form-control m-input" value="{{ jo_source.getCode() }}">
<div class="form-control-feedback hide" data-field="code"></div>
</div>
</div>
<div class="form-group m-form__group row no-border">
<label class="col-lg-3 col-form-label" data-field="name">
Name:
</label>
<div class="col-lg-9">
<input type="text" name="name" class="form-control m-input" value="{{ jo_source.getName() }}">
<div class="form-control-feedback hide" data-field="name"></div>
</div>
</div>
<div class="form-group m-form__group row">

View file

@ -84,8 +84,8 @@ $(function() {
width: 30
},
{
field: 'source_id',
title: 'Source ID'
field: 'name',
title: 'Name'
},
{
field: 'Actions',