Update params on get promocodes (CVS)

GET /api/v1/summits/{id}/promo-codes/csv

expand: new values owner_name,owner_email,sponsor_name

columns: new param

posible values

  $allowed_columns = [
            "id",
            "created",
            "last_edited",
            "code",
            "redeemed",
            "email_sent",
            "source",
            "summit_id",
            "creator_id",
            "class_name",
            "type",
            "speaker_id",
            "owner_name",
            "owner_email",
            "sponsor_name"
        ];

Change-Id: Ie51041077b277eb73f97df09c817573692aee043
This commit is contained in:
Sebastian Marcet 2018-09-05 14:34:12 -03:00
parent 86d1615a8f
commit 1539d2cd51
6 changed files with 68 additions and 11 deletions

View File

@ -210,7 +210,23 @@ final class OAuth2SummitPromoCodesApiController extends OAuth2ProtectedControlle
*/
public function getAllBySummitCSV($summit_id){
$values = Input::all();
$rules = [
$rules = [];
$allowed_columns = [
"id",
"created",
"last_edited",
"code",
"redeemed",
"email_sent",
"source",
"summit_id",
"creator_id",
"class_name",
"type",
"speaker_id",
"owner_name",
"owner_email",
"sponsor_name"
];
try {
@ -281,10 +297,19 @@ final class OAuth2SummitPromoCodesApiController extends OAuth2ProtectedControlle
'code',
]);
}
$columns_param = Input::get("columns", "");
$columns = [];
if(!empty($columns_param))
$columns = explode(',', $columns_param);
$diff = array_diff($columns, $allowed_columns);
if(count($diff) > 0){
throw new ValidationException(sprintf("columns %s are not allowed!", implode(",", $diff)));
}
$data = $this->promo_code_repository->getBySummit($summit, new PagingInfo($page, $per_page), $filter, $order);
$filename = "promocodes-" . date('Ymd');
$list = $data->toArray();
$list = $data->toArray(Input::get("expand", ""));
return $this->export
(
'csv',
@ -295,9 +320,9 @@ final class OAuth2SummitPromoCodesApiController extends OAuth2ProtectedControlle
'last_edited' => new EpochCellFormatter,
'redeemed' => new BooleanCellFormatter,
'email_sent' => new BooleanCellFormatter,
]
],
$columns
);
}
catch (ValidationException $ex1)
{

View File

@ -127,10 +127,11 @@ abstract class JsonController extends Controller
* @param string $filename
* @param array $items
* @param array $formatters
* @param array $columns
* @return \Illuminate\Http\Response
*/
protected function export($format, $filename, array $items, array $formatters = []){
if($format == 'csv') return $this->csv($filename, $items, $formatters);
protected function export($format, $filename, array $items, array $formatters = [], array $columns = []){
if($format == 'csv') return $this->csv($filename, $items, $formatters, ",", 'application/vnd.ms-excel', $columns);
}
/**
@ -139,9 +140,10 @@ abstract class JsonController extends Controller
* @param array $formatters
* @param string $field_separator
* @param string $mime_type
* @param array $columns
* @return \Illuminate\Http\Response
*/
private function csv($filename, array $items, array $formatters = [], $field_separator = ",", $mime_type = 'application/vnd.ms-excel'){
private function csv($filename, array $items, array $formatters = [], $field_separator = ",", $mime_type = 'application/vnd.ms-excel', array $columns = []){
$headers = [
'Cache-Control' => 'must-revalidate, post-check=0, pre-check=0',
'Content-type' => $mime_type,
@ -151,6 +153,6 @@ abstract class JsonController extends Controller
'Pragma' => 'public',
];
return Response::make(CSVExporter::getInstance()->export($items, $field_separator, [] , $formatters), 200, $headers);
return Response::make(CSVExporter::getInstance()->export($items, $field_separator, $columns, $formatters), 200, $headers);
}
}

View File

@ -60,6 +60,18 @@ class MemberSummitRegistrationPromoCodeSerializer
}
}
break;
case 'owner_name': {
if($code->hasOwner()){
$values['owner_name'] = $code->getOwner()->getFullName();
}
}
break;
case 'owner_email': {
if($code->hasOwner()){
$values['owner_email'] = $code->getOwner()->getEmail();
}
}
break;
}
}
}

View File

@ -56,6 +56,18 @@ final class SpeakerSummitRegistrationPromoCodeSerializer
)->serialize($expand);
}
}
case 'owner_name': {
if($code->hasSpeaker()){
$values['owner_name'] = $code->getSpeaker()->getFullName();
}
}
break;
case 'owner_email': {
if($code->hasSpeaker()){
$values['owner_email'] = $code->getSpeaker()->getEmail();
}
}
break;
break;
}
}

View File

@ -58,6 +58,10 @@ extends MemberSummitRegistrationPromoCodeSerializer
}
}
break;
case 'sponsor_name':{
$values['sponsor_name'] = $code->getSponsor()->getName();
}
break;
}
}
}

View File

@ -82,9 +82,11 @@ final class OAuth2PromoCodesApiTest extends ProtectedApiTest
public function testGetPromoCodesByClassNameSpeakerSummitRegistrationPromoCodeCSV(){
$params = [
'id' => 23,
'filter' => 'class_name=='.\models\summit\SpeakerSummitRegistrationPromoCode::ClassName,
'order' => '+code'
'id' => 25,
//'filter' => 'class_name=='.\models\summit\SpeakerSummitRegistrationPromoCode::ClassName,
'order' => '+code',
'columns' => 'code,type,owner_name,owner_email,sponsor_name,redeemed,email_sent',
'expand' => 'owner_name,owner_email,sponsor_name',
];
$headers = [