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; 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() public function __construct()
{ {
parent::__construct(); parent::__construct();
@ -76,6 +83,8 @@ class User extends BaseUser
// set date created // set date created
$this->date_create = new DateTime(); $this->date_create = new DateTime();
$this->metadata = []; $this->metadata = [];
$this->source = null;
} }
public function getID() public function getID()
@ -182,5 +191,17 @@ class User extends BaseUser
{ {
return $this->rider; 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 Catalyst\MenuBundle\Annotation\Menu;
use App\Entity\Rider; use App\Entity\Rider;
use App\Entity\JobOrderSource;
class APIUserController extends Controller class APIUserController extends Controller
{ {
@ -138,6 +139,7 @@ class APIUserController extends Controller
$em = $this->getDoctrine()->getManager(); $em = $this->getDoctrine()->getManager();
$params['roles'] = $em->getRepository(APIRole::class)->findAll(); $params['roles'] = $em->getRepository(APIRole::class)->findAll();
$params['riders'] = $em->getRepository(Rider::class)->findBy([], ['first_name' => 'asc']); $params['riders'] = $em->getRepository(Rider::class)->findBy([], ['first_name' => 'asc']);
$params['sources'] = $em->getRepository(JobOrderSource::class)->findBy([], ['name' => 'asc']);
// response // response
return $this->render('api-user/form.html.twig', $params); return $this->render('api-user/form.html.twig', $params);
@ -166,6 +168,15 @@ class APIUserController extends Controller
->setMetadata($meta); ->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 // set and save values
$obj->setName($req->request->get('name')) $obj->setName($req->request->get('name'))
->setEnabled($req->request->get('enabled') ? true : false) ->setEnabled($req->request->get('enabled') ? true : false)
@ -239,6 +250,7 @@ class APIUserController extends Controller
// get roles // get roles
$params['roles'] = $em->getRepository(APIRole::class)->findAll(); $params['roles'] = $em->getRepository(APIRole::class)->findAll();
$params['riders'] = $em->getRepository(Rider::class)->findBy([], ['first_name' => 'asc']); $params['riders'] = $em->getRepository(Rider::class)->findBy([], ['first_name' => 'asc']);
$params['sources'] = $em->getRepository(JobOrderSource::class)->findBy([], ['name' => 'asc']);
$params['obj'] = $obj; $params['obj'] = $obj;
@ -260,15 +272,34 @@ class APIUserController extends Controller
// set and save values // set and save values
// metadata // metadata
$rider_id = $req->request->get('rider_id'); $rider_id = $req->request->get('rider_id', '');
$rider = $em->getRepository(Rider::class)->find($rider_id); $rider = null;
// TODO: check for null rider 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 = $obj->getMetadata();
$meta['rider_id'] = $rider_id; $meta['rider_id'] = $rider_id;
// set api user in rider // source, if any
$rider->setAPIUser($obj); $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')) $obj->setName($req->request->get('name'))
->setEnabled($req->request->get('enabled') ? true : false) ->setEnabled($req->request->get('enabled') ? true : false)

View file

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

View file

@ -3,6 +3,9 @@
namespace App\Entity; namespace App\Entity;
use Doctrine\ORM\Mapping as ORM; use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\Validator\Constraints as Assert; use Symfony\Component\Validator\Constraints as Assert;
/** /**
@ -24,7 +27,13 @@ class JobOrderSource
* @ORM\Column(type="string", length=80, unique=true) * @ORM\Column(type="string", length=80, unique=true)
* @Assert\NotBlank() * @Assert\NotBlank()
*/ */
protected $source_id; protected $code;
/**
* @ORM\Column(type="string", length=80)
* @Assert\NotBlank()
*/
protected $name;
// callback URL // callback URL
/** /**
@ -32,10 +41,19 @@ class JobOrderSource
*/ */
protected $callback_url; 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() public function __construct()
{ {
$this->source_id = ''; $this->code = '';
$this->name = '';
$this->callback_url = ''; $this->callback_url = '';
$this->api_users = new ArrayCollection();
} }
public function getID() public function getID()
@ -43,15 +61,26 @@ class JobOrderSource
return $this->id; return $this->id;
} }
public function setSourceID($source_id) public function setCode($code)
{ {
$this->source_id = $source_id; $this->code = $code;
return $this; 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) public function setCallbackURL($callback_url)
@ -64,5 +93,10 @@ class JobOrderSource
{ {
return $this->callback_url; return $this->callback_url;
} }
public function getApiUsers()
{
return $this->api_users;
}
} }

View file

@ -45,6 +45,20 @@
</div> </div>
</div> </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="form-group m-form__group row no-border">
<div class="col-lg-8"> <div class="col-lg-8">
<label data-field="brand"> <label data-field="brand">

View file

@ -24,7 +24,7 @@
<h3 class="m-portlet__head-text"> <h3 class="m-portlet__head-text">
{% if mode == 'update' %} {% if mode == 'update' %}
Edit Job Order Source Edit Job Order Source
<small>{{ jo_source.getSourceID() }}</small> <small>{{ jo_source.getName }}</small>
{% else %} {% else %}
New Job Order Source New Job Order Source
{% endif %} {% 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') }}"> <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="m-portlet__body">
<div class="form-group m-form__group row no-border"> <div class="form-group m-form__group row no-border">
<label class="col-lg-3 col-form-label" data-field="source_id"> <label class="col-lg-3 col-form-label" data-field="code">
Source ID: Code:
</label> </label>
<div class="col-lg-9"> <div class="col-lg-9">
<input type="text" name="source_id" class="form-control m-input" value="{{ jo_source.getSourceID() }}"> <input type="text" name="code" class="form-control m-input" value="{{ jo_source.getCode() }}">
<div class="form-control-feedback hide" data-field="source_id"></div> <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> </div>
<div class="form-group m-form__group row"> <div class="form-group m-form__group row">

View file

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