Ivan - Add transfer to department [skip ci]

This commit is contained in:
ivan 2016-12-13 20:19:17 -03:00
parent 8b69934d36
commit 05380fdfda
5 changed files with 128 additions and 9 deletions

View File

@ -25,11 +25,13 @@ class UnAssignStaffController extends Controller {
if($ticket->owner && $ticket->owner->id == $user->id) { if($ticket->owner && $ticket->owner->id == $user->id) {
$user->sharedTicketList->remove($ticket); $user->sharedTicketList->remove($ticket);
$user->store(); $user->store();
$ticket->owner = null; $ticket->owner = null;
$ticket->unread = true; $ticket->unread = true;
$event = Ticketevent::getEvent(Ticketevent::UN_ASSIGN); $event = Ticketevent::getEvent(Ticketevent::UN_ASSIGN);
$event->setProperties(array( $event->setProperties(array(
'authorStaff' => Controller::getLoggedUser(), 'authorStaff' => $user,
'date' => Date::getCurrentDate() 'date' => Date::getCurrentDate()
)); ));

View File

@ -4,6 +4,9 @@ DataValidator::with('CustomValidations', true);
class DeleteDepartmentController extends Controller { class DeleteDepartmentController extends Controller {
const PATH = '/delete-department'; const PATH = '/delete-department';
private $departmentId;
private $transferDepartmentId;
public function validations() { public function validations() {
return [ return [
@ -13,15 +16,65 @@ class DeleteDepartmentController extends Controller {
'validation' => DataValidator::dataStoreId('department'), 'validation' => DataValidator::dataStoreId('department'),
'error' => ERRORS::INVALID_DEPARTMENT 'error' => ERRORS::INVALID_DEPARTMENT
], ],
'transferDepartmentId' => [
'validation' => DataValidator::dataStoreId('department'),
'error' => ERRORS::INVALID_DEPARTMENT
]
] ]
]; ];
} }
public function handler() { public function handler() {
$this->departmentId = Controller::request('departmentId');
$this->transferDepartmentId = Controller::request('transferDepartmentId');
$departmentId = Controller::request('departmentId'); if ($this->departmentId === $this->transferDepartmentId) {
$departmentInstance = Department::getDataStore($departmentId); Response::respondError(ERRORS::SAME_DEPARTMENT);
return;
}
$this->transferDepartmentTickets();
$departmentInstance = Department::getDataStore($this->departmentId);
$departmentInstance->delete(); $departmentInstance->delete();
Response::respondSuccess(); Response::respondSuccess();
} }
public function transferDepartmentTickets() {
$tickets = Ticket::find('department_id = ?', [$this->departmentId]);
$newDepartment = Department::getDataStore($this->transferDepartmentId);;
foreach($tickets as $ticket) {
$staffOwner = $ticket->owner;
if($staffOwner) {
$hasDepartment = false;
foreach($staffOwner->sharedDepartmentList as $department) {
if($department->id === $newDepartment->id) {
$hasDepartment = true;
}
}
if(!$hasDepartment) {
$staffOwner->sharedTicketList->remove($ticket);
$staffOwner->store();
$ticket->owner = null;
$ticket->unread = true;
$event = Ticketevent::getEvent(Ticketevent::UN_ASSIGN);
$event->setProperties(array(
'authorStaff' => $staffOwner,
'date' => Date::getCurrentDate()
));
$ticket->addEvent($event);
}
}
$ticket->department = $newDepartment;
$ticket->store();
}
}
} }

View File

@ -29,4 +29,5 @@ class ERRORS {
const INVALID_LEVEL = 'INVALID_LEVEL'; const INVALID_LEVEL = 'INVALID_LEVEL';
const ALREADY_A_STAFF = 'ALREADY_A_STAFF'; const ALREADY_A_STAFF = 'ALREADY_A_STAFF';
const INVALID_STAFF = 'INVALID_STAFF'; const INVALID_STAFF = 'INVALID_STAFF';
const SAME_DEPARTMENT = 'SAME_DEPARTMENT';
} }

View File

@ -1,18 +1,82 @@
describe'system/delete-department' do describe 'system/delete-department' do
request('/user/logout')
Scripts.createUser('tranferguy@opensupports.com', 'transfer', 'Transfer Guy')
Scripts.login('tranferguy@opensupports.com', 'transfer')
ticket1 = request('/ticket/create',{
title: 'Transferible ticket 1',
content: 'The north remembers',
departmentId: 4,
csrf_userid: $csrf_userid,
csrf_token: $csrf_token
})
ticket2 =request('/ticket/create',{
title: 'Transferible ticket 2',
content: 'The north remembers',
departmentId: 4,
csrf_userid: $csrf_userid,
csrf_token: $csrf_token
})
ticket3 = request('/ticket/create',{
title: 'Transferible ticket 3',
content: 'The north remembers',
departmentId: 4,
csrf_userid: $csrf_userid,
csrf_token: $csrf_token
})
ticket1 = ticket1['data']['ticketNumber']
ticket2 = ticket2['data']['ticketNumber']
ticket3 = ticket3['data']['ticketNumber']
request('/user/logout') request('/user/logout')
Scripts.login($staff[:email], $staff[:password], true) Scripts.login($staff[:email], $staff[:password], true)
request('/staff/edit', {
csrf_userid: $csrf_userid,
csrf_token: $csrf_token,
departments: '[1, 2, 3, 4]'
})
request('/staff/assign-ticket', {
ticketNumber: ticket3,
csrf_userid: $csrf_userid,
csrf_token: $csrf_token
})
it 'should delete department' do it 'should fail if departments are the same' do
result= request('/system/delete-department', { result = request('/system/delete-department', {
csrf_userid: $csrf_userid, csrf_userid: $csrf_userid,
csrf_token: $csrf_token, csrf_token: $csrf_token,
departmentId: 4 departmentId: 4,
transferDepartmentId: 4
})
(result['status']).should.equal('fail')
(result['message']).should.equal('SAME_DEPARTMENT')
end
it 'should delete department' do
result = request('/system/delete-department', {
csrf_userid: $csrf_userid,
csrf_token: $csrf_token,
departmentId: 4,
transferDepartmentId: 2
}) })
(result['status']).should.equal('success') (result['status']).should.equal('success')
row = $database.getRow('department', 4, 'id') row = $database.getRow('department', 4, 'id')
(row).should.equal(nil) (row).should.equal(nil)
ticket1 = $database.getRow('ticket', ticket1, 'ticket_number')
ticket2 = $database.getRow('ticket', ticket2, 'ticket_number')
ticket3 = $database.getRow('ticket', ticket3, 'ticket_number')
(ticket1['department_id']).should.equal('2')
(ticket1['owner_id']).should.equal(nil)
(ticket2['department_id']).should.equal('2')
(ticket2['owner_id']).should.equal(nil)
(ticket3['department_id']).should.equal('2')
(ticket3['owner_id']).should.equal($csrf_userid)
end end
end end

View File

@ -96,7 +96,6 @@ describe '/ticket/create' do
csrf_token: $csrf_token csrf_token: $csrf_token
}) })
puts result['message']
(result['status']).should.equal('success') (result['status']).should.equal('success')
ticket = $database.getRow('ticket','Winter is coming','title') ticket = $database.getRow('ticket','Winter is coming','title')