Set up
This commit is contained in:
@@ -82,7 +82,7 @@ func handleCreateResource(resp tools.NATSResponse) {
|
||||
if bk.FromNano != "" {
|
||||
access := oclib.NewRequestAdmin(oclib.LibDataEnum(oclib.PEER), nil)
|
||||
pp := access.LoadOne(bk.FromNano)
|
||||
if p := pp.ToPeer(); p == nil || p.Relation == peer.NANO {
|
||||
if p := pp.ToPeer(); p == nil || p.Relation != peer.NANO {
|
||||
return
|
||||
}
|
||||
access = oclib.NewRequestAdmin(oclib.LibDataEnum(oclib.BOOKING), nil)
|
||||
@@ -107,7 +107,7 @@ func handleCreateResource(resp tools.NATSResponse) {
|
||||
if pr.FromNano != "" {
|
||||
access := oclib.NewRequestAdmin(oclib.LibDataEnum(oclib.PEER), nil)
|
||||
pp := access.LoadOne(pr.FromNano)
|
||||
if p := pp.ToPeer(); p == nil || p.Relation == peer.NANO {
|
||||
if p := pp.ToPeer(); p == nil || p.Relation != peer.NANO {
|
||||
return
|
||||
}
|
||||
access = oclib.NewRequestAdmin(oclib.LibDataEnum(oclib.PURCHASE_RESOURCE), nil)
|
||||
|
||||
@@ -226,6 +226,8 @@ func (ws *WorkflowSchedule) GenerateExecutions(wf *workflow.Workflow, isPreempti
|
||||
SelectedPartnerships: ws.SelectedPartnerships,
|
||||
SelectedBuyings: ws.SelectedBuyings,
|
||||
SelectedStrategies: ws.SelectedStrategies,
|
||||
SelectedPaymentMode: ws.SelectedPaymentType,
|
||||
SelectedBillingStrategy: ws.SelectedBillingStrategy,
|
||||
SelectedEmbeddedStorages: ws.SelectedEmbeddedStorages,
|
||||
Priority: 1,
|
||||
ExecutionsID: ws.UUID,
|
||||
|
||||
@@ -356,6 +356,25 @@ func (s *SchedulingResourcesService) HandleCreateBooking(bk *booking.Booking, ad
|
||||
return !bk.IsDraft
|
||||
}
|
||||
|
||||
// Booking destined for a known NANO — store as local proxy without planner
|
||||
// check (the resource belongs to the NANO, not us). oc-discovery will
|
||||
// forward to the NANO via a DTN-critical stream.
|
||||
if bk.DestPeerID != "" && bk.DestPeerID != self.GetID() {
|
||||
d := oclib.NewRequestAdmin(oclib.LibDataEnum(oclib.PEER), nil).Search(&dbs.Filters{
|
||||
And: map[string][]dbs.Filter{
|
||||
"id": {{Operator: dbs.EQUAL.String(), Value: bk.DestPeerID}},
|
||||
"relation": {{Operator: dbs.EQUAL.String(), Value: peer.NANO}},
|
||||
},
|
||||
}, "", false, 0, 1)
|
||||
if len(d.Data) > 0 {
|
||||
bk.IsDraft = true
|
||||
if stored, _, err := booking.NewAccessor(adminReq).StoreOne(bk); err == nil {
|
||||
time.AfterFunc(10*time.Minute, func() { DraftTimeout(stored.GetID(), tools.BOOKING) })
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// New booking
|
||||
if !bk.ExpectedStartDate.IsZero() && bk.ExpectedStartDate.Before(time.Now().UTC()) {
|
||||
fmt.Println("HandleCreateBooking: start date in the past, discarding")
|
||||
|
||||
@@ -9,9 +9,10 @@ import (
|
||||
"time"
|
||||
|
||||
"cloud.o-forge.io/core/oc-lib/dbs"
|
||||
"cloud.o-forge.io/core/oc-lib/models/bill"
|
||||
"cloud.o-forge.io/core/oc-lib/models/billing"
|
||||
"cloud.o-forge.io/core/oc-lib/models/booking"
|
||||
"cloud.o-forge.io/core/oc-lib/models/common/enum"
|
||||
"cloud.o-forge.io/core/oc-lib/models/common/pricing"
|
||||
"cloud.o-forge.io/core/oc-lib/models/order"
|
||||
"cloud.o-forge.io/core/oc-lib/models/resources/purchase_resource"
|
||||
"cloud.o-forge.io/core/oc-lib/models/utils"
|
||||
@@ -261,6 +262,7 @@ func GenerateOrder(
|
||||
ExecutionsID: executionsID,
|
||||
Purchases: []*purchase_resource.PurchaseResource{},
|
||||
Bookings: []*booking.Booking{},
|
||||
Billing: map[pricing.BillingStrategy][]*booking.Booking{},
|
||||
Status: enum.PENDING,
|
||||
}
|
||||
for _, purch := range purchases {
|
||||
@@ -268,14 +270,17 @@ func GenerateOrder(
|
||||
scheduling_resources.FromSchedulerObject(tools.PURCHASE_RESOURCE, purch).(*purchase_resource.PurchaseResource))
|
||||
}
|
||||
for _, b := range bookings {
|
||||
newOrder.Bookings = append(newOrder.Bookings,
|
||||
scheduling_resources.FromSchedulerObject(tools.BOOKING, b).(*booking.Booking))
|
||||
bk := scheduling_resources.FromSchedulerObject(tools.BOOKING, b).(*booking.Booking)
|
||||
newOrder.Bookings = append(newOrder.Bookings, bk)
|
||||
// Groupe les bookings par stratégie de facturation pour permettre
|
||||
// à DraftFirstBill de savoir quand et comment facturer chaque item.
|
||||
newOrder.Billing[bk.BillingStrategy] = append(newOrder.Billing[bk.BillingStrategy], bk)
|
||||
}
|
||||
res, _, err := order.NewAccessor(request).StoreOne(newOrder)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
if _, err := bill.DraftFirstBill(res.(*order.Order), request); err != nil {
|
||||
if _, err := billing.DraftFirstBill(res.(*order.Order), request); err != nil {
|
||||
return res.GetID(), err
|
||||
}
|
||||
return res.GetID(), nil
|
||||
|
||||
Reference in New Issue
Block a user