Commit 1477dd45 by Vladislav

#20697 Доработка добавления модификаторов

1 parent ac8aa4ac
......@@ -3,6 +3,8 @@
namespace App\Console\Commands;
use App\Models\Pivots\GoalBidModifier;
use App\Models\Pivots\GoalRetargetinglist;
use App\Models\Retargetinglist;
use App\Models\Tokens;
use App\Service\Requests\Direct\AddBidModifiers;
use Carbon\Carbon;
......@@ -71,6 +73,7 @@ class BidModifiersAdd extends Command
'bid_modifiers.desktop_adjustment',
'bid_modifiers.video_adjustment',
'dictionaries.region_id',
'dictionaries.token_id',
])
->select([
DB::raw('json_arrayagg(goal_bid_modifiers.id) as ids'),
......@@ -80,11 +83,61 @@ class BidModifiersAdd extends Command
'bid_modifiers.video_adjustment as video_adjustment',
'bid_modifiers.desktop_adjustment as desktop_adjustment',
'dictionaries.region_id',
'dictionaries.token_id',
DB::raw('json_arrayagg(bid_modifiers.demographics_adjustment) as demographics_adjustments'),
DB::raw('json_arrayagg(bid_modifiers.retargeting_adjustment) as retargeting_adjustments'),
])
->get();
foreach ($goalBidModifiers as $key => $goalBidModifier) {
$retargeting_adjustments = array_filter(@json_decode($goalBidModifier->retargeting_adjustments, true));
if (count($retargeting_adjustments)) {
$isFindNotExternalRetargetingList = false;
$retargeting_adjustments = array_map(function ($retargeting_adjustment) use ($goalBidModifiers, $key, $goalBidModifier, &$isFindNotExternalRetargetingList) {
$retargeting_list = Retargetinglist::firstWhere('external_id', $retargeting_adjustment['RetargetingConditionId']);
if (!$retargeting_list) {
$goalBidModifiers->forget($key);
$isFindNotExternalRetargetingList = true;
return false;
}
$goal_retargeting_list = GoalRetargetinglist::forExternal()->where('token_id', $goalBidModifier->token_id)
->where('retargetinglist_id', $retargeting_list->getKey())
->first();
if (!$goal_retargeting_list) {
$goalBidModifiers->forget($key);
$isFindNotExternalRetargetingList = true;
return false;
}
$retargeting_adjustment['RetargetingConditionId'] = $goal_retargeting_list->external_id;
unset($retargeting_adjustment['Accessible']);
unset($retargeting_adjustment['Enabled']);
return $retargeting_adjustment;
}, $retargeting_adjustments);
if (!$isFindNotExternalRetargetingList) {
$goalBidModifier->retargeting_adjustments = $retargeting_adjustments;
}
}
}
$goalBidModifiers = $goalBidModifiers->values();
if (!$goalBidModifiers->count()) {
continue;
}
......
......@@ -533,7 +533,20 @@ class DictionaryCampaign extends Pivot
public function goalAudienceTargetsForNotExternalForNotReserveCreate()
{
return $this->goalAudienceTargets()->forNotExternal()->forNotReserveCreate();
return $this->goalAudienceTargets()->forNotExternal()->forNotReserveCreate()
->where(function (Builder $query) {
$query->whereNull('goal_audience_targets.goal_retargetinglist_id')
->orWhere(function (Builder $query) {
$query->whereNotNull('goal_audience_targets.goal_retargetinglist_id')
->whereNotNull('goal_audience_targets.goal_retargetinglist_external_id');
});
})->where(function (Builder $query) {
$query->whereNull('goal_audience_targets.goal_ad_group_id')
->orWhere(function (Builder $query) {
$query->whereNotNull('goal_audience_targets.goal_ad_group_id')
->whereNotNull('goal_audience_targets.goal_ad_group_external_id');
});
});
}
}
......@@ -3,7 +3,6 @@
namespace App\Service\Requests\Direct;
use App\Jobs\ProcessCallLimitedAPI;
use App\Models\BidModifier;
use App\Models\Pivots\GoalBidModifier;
use App\Service\Contract\APIRequest;
use App\Service\Requests\DirectRequest;
......@@ -153,14 +152,7 @@ class AddBidModifiers extends DirectRequest
$data['DemographicsAdjustments'] = array_values($demographics_adjustments);
} elseif ($retargeting_adjustments = array_map(function ($retargeting_adjustment) {
unset($retargeting_adjustment['Accessible']);
unset($retargeting_adjustment['Enabled']);
return $retargeting_adjustment;
}, array_filter(@json_decode($goalBidModifier->retargeting_adjustments, true)))) {
} elseif ($retargeting_adjustments = $goalBidModifier->retargeting_adjustments) {
$data['RetargetingAdjustments'] = $retargeting_adjustments;
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!