diff --git a/pallets/tenancy/src/lib.rs b/pallets/tenancy/src/lib.rs index a4c865e6..df8b5758 100644 --- a/pallets/tenancy/src/lib.rs +++ b/pallets/tenancy/src/lib.rs @@ -173,13 +173,25 @@ pub mod pallet { let caller = ensure_signed(origin.clone())?; // Ensure that the caller has the tenancy role ensure!(Roles::TenantLog::::contains_key(caller.clone()), Error::::NotATenant); - RegisteredTenant::::new(caller.clone(), info.clone()).ok(); + + // Ensure that the asset is valid let collection_id: T::NftCollectionId = asset_type.value().into(); let ownership = Share::Pallet::::virtual_acc(collection_id, asset_id); ensure!(ownership.is_some(), Error::::NotAnAsset); let virtual_account = ownership.unwrap().virtual_account; + + if !Tenants::::contains_key(caller.clone()){ + RegisteredTenant::::new(caller.clone(), info.clone(), Some(virtual_account.clone())).ok(); + }else{ + let mut val0 = Self::infos(&caller).unwrap(); + Tenants::::mutate(&caller,|val|{ + val0.asset_requested = Some(virtual_account.clone()); + *val = Some(val0); + }); + } + Self::request_helper(origin.clone(), virtual_account.clone(), info).ok(); let now = >::block_number(); @@ -225,9 +237,12 @@ pub mod pallet { Error::::NotAValidPayment ); + Self::payment_helper(origin, virtual_account.clone(), collection_id, asset_id).ok(); let now = >::block_number(); + + Self::deposit_event(Event::GuarantyDepositPayment { tenant: caller, when: now, diff --git a/pallets/tenancy/src/types.rs b/pallets/tenancy/src/types.rs index 7be6ae44..cbc64dea 100644 --- a/pallets/tenancy/src/types.rs +++ b/pallets/tenancy/src/types.rs @@ -34,15 +34,19 @@ pub struct RegisteredTenant { pub infos: Box>, ///Creation Blocknumber pub registered_at_block: BlockNumberOf, + ///Asset requested by the tenant + pub asset_requested: Option, } impl RegisteredTenant { pub fn new( tenant_id: T::AccountId, infos: Box>, + asset_requested: Option, + ) -> DispatchResult { let registered_at_block = >::block_number(); - let tenant = RegisteredTenant:: { infos, registered_at_block }; + let tenant = RegisteredTenant:: { infos, registered_at_block,asset_requested}; Tenants::::insert(tenant_id.clone(), tenant); Roles::TenantLog::::mutate(tenant_id, |val| { let mut val0 = val.clone().unwrap();