Skip to content

Commit 8a90a32

Browse files
committed
chore: several agreements
1 parent 78de34c commit 8a90a32

9 files changed

Lines changed: 38 additions & 42 deletions

File tree

apps/web-app/app/components/PartnerCard.vue

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -49,33 +49,35 @@
4949
{{ partner?.legal }}
5050
</p>
5151

52-
<p class="text-sm/4 text-muted line-clamp-3">
52+
<p class="text-sm/4 text-muted line-clamp-4">
5353
{{ partner.city }}
5454
</p>
5555
</div>
5656
</ActiveCard>
5757
</template>
5858

5959
<script setup lang="ts">
60-
import type { Partner, PartnerAgreement, PartnerLegalEntity } from '@roll-stack/database'
60+
import type { Partner } from '@roll-stack/database'
61+
import type { PartnerLegalEntityWithData } from '~/stores/partner'
6162
6263
const { partner } = defineProps<{
6364
partner: Partner & {
64-
legalEntity: PartnerLegalEntity | null
65-
activeAgreement: PartnerAgreement | null
65+
legalEntity: PartnerLegalEntityWithData | null
6666
}
6767
}>()
6868
6969
const { imagesMode } = useApp()
7070
71+
const minimalAgreement = computed(() => partner.legalEntity?.agreements.toSorted((a, b) => new Date(a.willEndAt ?? '').getTime() - new Date(b.willEndAt ?? '').getTime())[0])
72+
7173
const agreementProgress = computed(() => {
72-
if (!partner?.activeAgreement?.willEndAt || !partner?.activeAgreement?.concludedAt) {
74+
if (!minimalAgreement.value?.willEndAt || !minimalAgreement.value?.concludedAt) {
7375
return 0
7476
}
7577
7678
const now = new Date()
77-
const concludedAt = new Date(partner.activeAgreement.concludedAt)
78-
const willEndAt = new Date(partner.activeAgreement.willEndAt)
79+
const concludedAt = new Date(minimalAgreement.value.concludedAt)
80+
const willEndAt = new Date(minimalAgreement.value.willEndAt)
7981
8082
const res = Math.floor(100 - ((now.getTime() - concludedAt.getTime()) / (willEndAt.getTime() - concludedAt.getTime())) * 100)
8183

apps/web-app/app/components/form/UpdatePartnerAgreement.vue

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
<UInputNumber
2929
v-model="state.marketingFee"
3030
orientation="vertical"
31+
:step="0.1"
3132
size="xl"
3233
class="w-full items-center justify-center"
3334
/>
@@ -87,8 +88,8 @@ const { t } = useI18n()
8788
const actionToast = useActionToast()
8889
8990
const partnerStore = usePartnerStore()
90-
const partner = computed(() => partnerStore.partners.find((partner) => partner.activeAgreementId === agreementId))
91-
const agreement = computed(() => partner.value?.activeAgreement)
91+
const partner = computed(() => partnerStore.partners.find((partner) => partner.legalEntity?.agreements.some((agreement) => agreement.id === agreementId)))
92+
const agreement = computed(() => partner.value?.legalEntity?.agreements.find((agreement) => agreement.id === agreementId))
9293
9394
const state = ref<Partial<UpdatePartnerAgreement>>({
9495
royalty: agreement.value?.royalty,

apps/web-app/app/pages/partner/[id].vue

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23,23 +23,12 @@
2323
</template>
2424

2525
<script setup lang="ts">
26-
import { format } from 'date-fns'
27-
import { ru } from 'date-fns/locale/ru'
28-
2926
const { t } = useI18n()
3027
const { params } = useRoute('partner-id')
3128
3229
const partnerStore = usePartnerStore()
3330
const partner = computed(() => partnerStore.partners.find((partner) => partner.id === params.id))
3431
35-
const activeAgreementTo = computed(() => {
36-
if (!partner.value?.activeAgreement?.willEndAt) {
37-
return 'отсутствует'
38-
}
39-
40-
return `до ${format(new Date(partner.value?.activeAgreement?.willEndAt), 'd MMMM yyyy', { locale: ru })}`
41-
})
42-
4332
const submenuItems = computed(() => [
4433
{
4534
label: t('common.partner'),
@@ -54,10 +43,10 @@ const submenuItems = computed(() => [
5443
badge: partner.value?.kitchens.length,
5544
},
5645
{
57-
label: 'Договор',
46+
label: 'Договора',
5847
to: `/partner/${partner.value?.id}/agreement`,
5948
icon: 'i-lucide-scroll-text',
60-
badge: activeAgreementTo.value,
49+
badge: partner.value?.legalEntity?.agreements.length,
6150
},
6251
{
6352
label: 'Юр. лицо',

apps/web-app/app/pages/partner/[id]/agreement.vue

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
<template>
22
<Content>
33
<div class="grid grid-cols-1 gap-4 md:gap-6 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4">
4-
<div v-if="partner?.activeAgreement" class="lg:col-span-2">
5-
<PartnerAgreementCard :agreement="partner.activeAgreement" />
4+
<div
5+
v-for="agreement in partner?.legalEntity?.agreements"
6+
:key="agreement.id"
7+
class="lg:col-span-2"
8+
>
9+
<PartnerAgreementCard :agreement="agreement" />
610
</div>
711

812
<div>

apps/web-app/app/pages/partner/[id]/index.vue

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
{{ partner?.priceLevel }} уровень цен
1919
</p>
2020

21-
<p class="text-base">
21+
<p class="text-base/5">
2222
{{ partner?.city }}
2323
</p>
2424
</div>
@@ -36,7 +36,7 @@
3636
Престиж
3737
</h3>
3838
</div>
39-
<p class="text-muted leading-5">
39+
<p class="text-base/5">
4040
Престиж не является статичным - он может как укрепляться, так и утрачиваться в зависимости от действий Партнера, его достижений и общественного восприятия.
4141
</p>
4242
</div>
@@ -46,8 +46,12 @@
4646
<PartnerLegalEntityCard :partner-id="partner?.id ?? ''" :entity="partner?.legalEntity" />
4747
</div>
4848

49-
<div v-if="partner?.activeAgreement" class="lg:col-span-2">
50-
<PartnerAgreementCard :agreement="partner.activeAgreement" />
49+
<div
50+
v-for="agreement in partner?.legalEntity?.agreements"
51+
:key="agreement.id"
52+
class="lg:col-span-2"
53+
>
54+
<PartnerAgreementCard :agreement="agreement" />
5155
</div>
5256
</div>
5357
</Content>

apps/web-app/app/stores/partner.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
import type { Kitchen, Partner, PartnerAgreement, PartnerLegalEntity } from '@roll-stack/database'
22

3+
export type PartnerLegalEntityWithData = PartnerLegalEntity & {
4+
agreements: PartnerAgreement[]
5+
}
6+
37
type PartnerWithData = Partner & {
48
kitchens: Kitchen[]
5-
legalEntity: PartnerLegalEntity | null
6-
activeAgreement: PartnerAgreement | null
9+
legalEntity: PartnerLegalEntityWithData | null
710
}
811

912
export const usePartnerStore = defineStore('partner', () => {

apps/web-app/server/api/partner/id/[partnerId]/agreement.post.ts

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,6 @@ export default defineEventHandler(async (event) => {
2828
})
2929
}
3030

31-
// Update
32-
await repository.partner.update(partnerId, {
33-
activeAgreementId: agreement.id,
34-
})
35-
3631
return {
3732
ok: true,
3833
result: agreement,

packages/database/src/repository/partner.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,11 @@ export class Partner {
3030
where: (partners, { eq }) => eq(partners.isActive, true),
3131
with: {
3232
kitchens: true,
33-
legalEntity: true,
34-
activeAgreement: true,
33+
legalEntity: {
34+
with: {
35+
agreements: true,
36+
},
37+
},
3538
},
3639
})
3740
}

packages/database/src/tables.ts

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,6 @@ export const partners = pgTable('partners', {
8585
city: varchar('city'),
8686
legal: varchar('legal'),
8787
legalEntityId: cuid2('legal_entity_id').references(() => partnerLegalEntities.id),
88-
activeAgreementId: cuid2('active_agreement_id').references(() => partnerAgreements.id),
8988
})
9089

9190
export const partnerLegalEntities = pgTable('partner_legal_entities', {
@@ -573,10 +572,6 @@ export const partnerRelations = relations(partners, ({ many, one }) => ({
573572
fields: [partners.legalEntityId],
574573
references: [partnerLegalEntities.id],
575574
}),
576-
activeAgreement: one(partnerAgreements, {
577-
fields: [partners.activeAgreementId],
578-
references: [partnerAgreements.id],
579-
}),
580575
}))
581576

582577
export const partnerLegalEntityRelations = relations(partnerLegalEntities, ({ many }) => ({

0 commit comments

Comments
 (0)