1package App::Netdisco::Web::Plugin::AdminTask::DuplicateDevices; 2 3use Dancer ':syntax'; 4use Dancer::Plugin::Ajax; 5use Dancer::Plugin::DBIC; 6use Dancer::Plugin::Auth::Extensible; 7 8use App::Netdisco::Web::Plugin; 9 10register_admin_task({ 11 tag => 'duplicatedevices', 12 label => 'Duplicate Devices', 13}); 14 15ajax '/ajax/content/admin/duplicatedevices' => require_role admin => sub { 16 my @set = schema('netdisco')->resultset('Device')->search({ 17 serial => { '-in' => schema('netdisco')->resultset('Device')->search({ 18 '-and' => [serial => { '!=', undef }, serial => { '!=', '' }], 19 }, { 20 group_by => ['serial'], 21 having => \'count(*) > 1', 22 columns => 'serial', 23 })->as_query 24 }, 25 }, { columns => [qw/ip dns contact location name model os_ver serial/] }) 26 ->with_times->hri->all; 27 28 content_type('text/html'); 29 template 'ajax/admintask/duplicatedevices.tt', { 30 results => \@set 31 }, { layout => undef }; 32}; 33 34true; 35