mirror of
https://github.com/solidtime-io/solidtime.git
synced 2026-08-08 08:12:17 +01:00
Add ability to update billable rate of existing time entries
This commit is contained in:
committed by
Gregor Vostrak
parent
7c26cee1ea
commit
2184b3c835
@@ -9,9 +9,75 @@ use App\Models\Organization;
|
||||
use App\Models\Project;
|
||||
use App\Models\ProjectMember;
|
||||
use App\Models\TimeEntry;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
|
||||
class BillableRateService
|
||||
{
|
||||
public function updateTimeEntriesBillableRateForProjectMember(ProjectMember $projectMember): void
|
||||
{
|
||||
TimeEntry::query()
|
||||
->where('billable', '=', true)
|
||||
->where('member_id', '=', $projectMember->member_id)
|
||||
->where('project_id', '=', $projectMember->project_id)
|
||||
->update(['billable_rate' => $projectMember->billable_rate]);
|
||||
}
|
||||
|
||||
public function updateTimeEntriesBillableRateForProject(Project $project): void
|
||||
{
|
||||
TimeEntry::query()
|
||||
->where('billable', '=', true)
|
||||
->where('organization_id', '=', $project->organization_id)
|
||||
->whereBelongsTo($project, 'project')
|
||||
->whereDoesntHave('member', function (Builder $query) use ($project) {
|
||||
/** @var Builder<Member> $query */
|
||||
$query->whereHas('projectMembers', function (Builder $query) use ($project) {
|
||||
/** @var Builder<ProjectMember> $query */
|
||||
$query->whereBelongsTo($project, 'project')
|
||||
->whereNotNull('billable_rate');
|
||||
});
|
||||
})
|
||||
->update(['billable_rate' => $project->billable_rate]);
|
||||
}
|
||||
|
||||
public function updateTimeEntriesBillableRateForMember(Member $member): void
|
||||
{
|
||||
TimeEntry::query()
|
||||
->where('billable', '=', true)
|
||||
->where('organization_id', '=', $member->organization_id)
|
||||
->where('member_id', '=', $member->getKey())
|
||||
->whereDoesntHave('project', function (Builder $builder) use ($member): void {
|
||||
/** @var Builder<Project> $builder */
|
||||
$builder->whereNotNull('billable_rate')
|
||||
->orWhereHas('members', function (Builder $builder) use ($member): void {
|
||||
/** @var Builder<ProjectMember> $builder */
|
||||
$builder->whereNotNull('billable_rate')
|
||||
->where('member_id', '=', $member->getKey());
|
||||
});
|
||||
})
|
||||
->update(['billable_rate' => $member->billable_rate]);
|
||||
}
|
||||
|
||||
public function updateTimeEntriesBillableRateForOrganization(Organization $organization): void
|
||||
{
|
||||
TimeEntry::query()
|
||||
->where('billable', '=', true)
|
||||
->where('organization_id', '=', $organization->getKey())
|
||||
->whereDoesntHave('member', function (Builder $builder) {
|
||||
/** @var Builder<Member> $builder */
|
||||
$builder->whereNotNull('billable_rate');
|
||||
})
|
||||
->whereDoesntHave('project', function (Builder $builder): void {
|
||||
/** @var Builder<Project> $builder */
|
||||
$builder->whereNotNull('billable_rate')
|
||||
->orWhereHas('members', function (Builder $builder): void {
|
||||
/** @var Builder<ProjectMember> $builder */
|
||||
$builder->whereNotNull('billable_rate')
|
||||
->whereRaw('member_id = time_entries.member_id');
|
||||
});
|
||||
})
|
||||
->update(['billable_rate' => $organization->billable_rate]);
|
||||
}
|
||||
|
||||
public function getBillableRateForTimeEntryWithGivenRelations(TimeEntry $timeEntry, ?ProjectMember $projectMember, ?Project $project, ?Member $member, ?Organization $organization): ?int
|
||||
{
|
||||
if (! $timeEntry->billable) {
|
||||
|
||||
Reference in New Issue
Block a user