Commit 0c7e661f by Vladislav

#19472 Синхронизация групп с целевыми

1 parent cc186b99
...@@ -42,6 +42,7 @@ class Kernel extends ConsoleKernel ...@@ -42,6 +42,7 @@ class Kernel extends ConsoleKernel
protected function schedule(Schedule $schedule) protected function schedule(Schedule $schedule)
{ {
$schedule->command(DictionaryCampaignsSyncByCampaign::class)->everyThirtyMinutes(); $schedule->command(DictionaryCampaignsSyncByCampaign::class)->everyThirtyMinutes();
$schedule->command(RefreshLimits::class)->hourly(); $schedule->command(RefreshLimits::class)->hourly();
$schedule->command(DictionariesLoad::class)->saturdays()->at('05:00'); $schedule->command(DictionariesLoad::class)->saturdays()->at('05:00');
$schedule->command(CampaignsCheckChange::class)->hourlyAt(5); $schedule->command(CampaignsCheckChange::class)->hourlyAt(5);
......
...@@ -180,7 +180,7 @@ class AdGroup extends Model ...@@ -180,7 +180,7 @@ class AdGroup extends Model
$ad_group->campaign->copyGroupInGoalGroup(); $ad_group->campaign->copyGroupInGoalGroup();
$ad_group->campaign->copyGroupInGoalKeyword(); $ad_group->campaign->copyGroupInGoalKeyword();
} else { } else {
$ad_group->goalGroups()->update( $ad_group->goalGroups()->has('dictionaryCampaignSynchronized')->update(
GoalAdGroup::copyPropertyFromMain($ad_group) GoalAdGroup::copyPropertyFromMain($ad_group)
); );
} }
...@@ -189,7 +189,7 @@ class AdGroup extends Model ...@@ -189,7 +189,7 @@ class AdGroup extends Model
if (self::getPropertiesWatch()->first(function ($property_name) use ($ad_group) { if (self::getPropertiesWatch()->first(function ($property_name) use ($ad_group) {
return $ad_group->{$property_name} !== $ad_group->getOriginal($property_name); return $ad_group->{$property_name} !== $ad_group->getOriginal($property_name);
})) { })) {
$ad_group->goalGroups()->forExternal()->update([ $ad_group->goalGroups()->has('dictionaryCampaignSynchronized')->forExternal()->update([
'updated_need' => Carbon::now(), 'updated_need' => Carbon::now(),
]); ]);
} }
......
...@@ -194,6 +194,8 @@ class Campaigns extends Model ...@@ -194,6 +194,8 @@ class Campaigns extends Model
$dictionaryCampaign->delete(); $dictionaryCampaign->delete();
}); });
} }
} elseif ($campaign->manage) {
$campaign->copyInGoalCampaign();
} }
if (self::getPropertiesWatch()->first(function ($property_name) use ($campaign) { if (self::getPropertiesWatch()->first(function ($property_name) use ($campaign) {
...@@ -222,7 +224,7 @@ class Campaigns extends Model ...@@ -222,7 +224,7 @@ class Campaigns extends Model
{ {
$campaign = $this; $campaign = $this;
$campaign->dictionaryCampaigns->each(function (DictionaryCampaign $dictionaryCampaign) use ($campaign) { $campaign->dictionaryCampaignSynchronized->each(function (DictionaryCampaign $dictionaryCampaign) use ($campaign) {
$campaign->groups->each(function (AdGroup $adGroup) use ($dictionaryCampaign) { $campaign->groups->each(function (AdGroup $adGroup) use ($dictionaryCampaign) {
...@@ -238,7 +240,7 @@ class Campaigns extends Model ...@@ -238,7 +240,7 @@ class Campaigns extends Model
$campaign = $this; $campaign = $this;
$campaign->dictionaryCampaigns->each(function (DictionaryCampaign $dictionaryCampaign) use ($campaign) { $campaign->dictionaryCampaignSynchronized->each(function (DictionaryCampaign $dictionaryCampaign) use ($campaign) {
$dictionaryCampaign->groups->each(function (GoalAdGroup $goalAdGroup) use ($campaign, $dictionaryCampaign) { $dictionaryCampaign->groups->each(function (GoalAdGroup $goalAdGroup) use ($campaign, $dictionaryCampaign) {
...@@ -344,6 +346,11 @@ class Campaigns extends Model ...@@ -344,6 +346,11 @@ class Campaigns extends Model
return $this->hasMany(DictionaryCampaign::class, 'campaign_id'); return $this->hasMany(DictionaryCampaign::class, 'campaign_id');
} }
public function dictionaryCampaignSynchronized()
{
return $this->dictionaryCampaigns()->synchronized();
}
public function dictionaryCampaignVariables() public function dictionaryCampaignVariables()
{ {
return $this->hasManyThrough(DictionaryCampaignVariable::class, DictionaryCampaign::class, 'campaign_id', 'dictionary_campaign_id'); return $this->hasManyThrough(DictionaryCampaignVariable::class, DictionaryCampaign::class, 'campaign_id', 'dictionary_campaign_id');
......
...@@ -190,14 +190,35 @@ class DictionaryCampaign extends Pivot ...@@ -190,14 +190,35 @@ class DictionaryCampaign extends Pivot
$data['synced_need'] = Carbon::now(); $data['synced_need'] = Carbon::now();
} }
return DictionaryCampaign::updateOrCreate([ $data = array_merge(
'dictionary_id' => $dictionary->getKey(),
'campaign_id' => $campaign->getKey(),
'deleted_at' => null,
], array_merge(
DictionaryCampaign::copyPropertyFromMain($campaign), DictionaryCampaign::copyPropertyFromMain($campaign),
$data $data
)); );
$dictionaryCampaign = DictionaryCampaign::where('dictionary_id', $dictionary->getKey())
->where('campaign_id', $campaign->getKey())
->whereNull('deleted_at')
->first();
if ($dictionaryCampaign) {
if ($dictionaryCampaign->synced) {
$dictionaryCampaign->update($data);
return $dictionaryCampaign;
}
} else {
$dictionaryCampaign = DictionaryCampaign::create(
array_merge(
$data,
[
'dictionary_id' => $dictionary->getKey(),
'campaign_id' => $campaign->getKey(),
]
)
);
return $dictionaryCampaign;
}
return null;
} }
public static function boot() public static function boot()
......
...@@ -190,6 +190,11 @@ class GoalAdGroup extends Pivot ...@@ -190,6 +190,11 @@ class GoalAdGroup extends Pivot
return $this->belongsTo(DictionaryCampaign::class, 'dictionary_campaign_id'); return $this->belongsTo(DictionaryCampaign::class, 'dictionary_campaign_id');
} }
public function dictionaryCampaignSynchronized()
{
return $this->dictionaryCampaign()->synchronized();
}
public function goalKeywords() public function goalKeywords()
{ {
return $this->hasMany(GoalKeyword::class, 'goal_ad_group_id'); return $this->hasMany(GoalKeyword::class, 'goal_ad_group_id');
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
namespace Tests\Unit; namespace Tests\Unit;
use App\Console\Commands\DictionaryCampaignsSyncByCampaign;
use App\Jobs\ProcessCallLimitedAPI; use App\Jobs\ProcessCallLimitedAPI;
use App\Models\Account; use App\Models\Account;
use App\Models\Campaigns; use App\Models\Campaigns;
...@@ -184,7 +185,7 @@ class CheckCampaignsTest extends TestCase ...@@ -184,7 +185,7 @@ class CheckCampaignsTest extends TestCase
$this->assertNull($campaign->pivot->updated_need); $this->assertNull($campaign->pivot->updated_need);
$campaign->pivot->update([ $campaign->pivot->update([
'updated' => true, 'synced' => true,
]); ]);
$campaign = $this->dictionary->campaigns()->first(); $campaign = $this->dictionary->campaigns()->first();
...@@ -208,7 +209,7 @@ class CheckCampaignsTest extends TestCase ...@@ -208,7 +209,7 @@ class CheckCampaignsTest extends TestCase
$campaign->pivot->update([ $campaign->pivot->update([
'updated' => false, 'synced' => false,
]); ]);
$campaign->update([ $campaign->update([
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!