Last active
February 4, 2021 20:24
-
-
Save stockedge/cd8fb06edad652d329cdb51d0c6b3b16 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class 「案件」 | |
types | |
private 「案件ステータス」 = <請書発行済> | <見積保存> | <注文済> | <出荷済> | |
instance variables | |
private サービス: 「サービス条件」`「サービス」; | |
private 種類: [「製造サービス詳細条件」`「種類」]; | |
private 案件ステータス: 「案件ステータス」 := <見積保存>; | |
private 適用クーポン: 「クーポン一覧」 := new 「クーポン一覧」(); | |
private 見積有効期間: 「有効期限条件」`「期間」 := 90; | |
operations | |
public 「案件」: 「サービス条件」`「サービス」 * [「製造サービス詳細条件」`「種類」] ==> 「案件」 | |
「案件」(aサービス, a種類) == atomic( | |
サービス := aサービス; | |
種類 := a種類 | |
); | |
private pure 請書発行済: () ==> bool | |
請書発行済() == return 案件ステータス = <請書発行済> | |
post if 案件ステータス = <請書発行済> then RESULT = true else RESULT = true; | |
public 請書発行: () ==> () | |
請書発行() == 案件ステータス := <請書発行済> | |
post 案件ステータス = <請書発行済>; | |
public クーポン適用: 「クーポン」 ==> () | |
クーポン適用(aクーポン) == 適用クーポン.追加(aクーポン); | |
public クーポン適用: 「クーポン一覧」 ==> () | |
クーポン適用(aクーポン一覧) == 適用クーポン.追加(aクーポン一覧); | |
public クーポン除外: 「クーポン」 ==> () | |
クーポン除外(aクーポン) == 適用クーポン.除外(aクーポン); | |
public pure クーポン適用済み判定: 「クーポン」 ==> bool | |
クーポン適用済み判定(aクーポン) == 適用クーポン.保有(aクーポン); | |
public 友達紹介クーポン獲得: () ==> () | |
友達紹介クーポン獲得() == if 請書発行済() then 適用クーポン.友達紹介クーポン獲得(); | |
public pure getサービス: () ==> 「サービス条件」`「サービス」 | |
getサービス() == return サービス; | |
public pure get種類: () ==> [「製造サービス詳細条件」`「種類」] | |
get種類() == return 種類; | |
end 「案件」 | |
class 「案件一覧」 | |
instance variables | |
private 案件一覧: set of 「案件」 := {} | |
end 「案件一覧」 | |
class 「顧客」 | |
instance variables | |
private CPM: 「CPM条件」`「CPM」; | |
private 使用クーポンコード: [「クーポンマスタ」`「クーポンコード」]; | |
private クーポン一覧: 「クーポン一覧」 := new 「クーポン一覧」(); | |
private 案件一覧: 「案件一覧」 := new 「案件一覧」(); | |
operations | |
public 「顧客」: 「CPM条件」`「CPM」 * [「クーポンマスタ」`「クーポンコード」] * 「クーポン一覧」 * 「案件一覧」 ==> 「顧客」 | |
「顧客」(aCPM, aクーポンコード, aクーポン一覧, a案件一覧) == atomic( | |
CPM := aCPM; | |
使用クーポンコード := aクーポンコード; | |
クーポン一覧 := aクーポン一覧; | |
案件一覧 := a案件一覧; | |
); | |
public pure getCPM: () ==> [「CPM条件」`「CPM」] | |
getCPM() == return CPM | |
post RESULT = CPM; | |
public pure getクーポンコード: () ==> [「クーポンマスタ」`「クーポンコード」] | |
getクーポンコード() == return 使用クーポンコード | |
post RESULT = 使用クーポンコード; | |
public pure getクーポン一覧: () ==> 「クーポン一覧」 | |
getクーポン一覧() == return クーポン一覧 | |
post RESULT = クーポン一覧; | |
public クーポン獲得: 「クーポン」 ==> () | |
クーポン獲得(aクーポン) == return クーポン一覧.追加(aクーポン) | |
post クーポン一覧.保有(aクーポン); | |
end 「顧客」 | |
class 「クーポン一覧」 | |
instance variables | |
クーポン一覧: set of 「クーポン」 := {} | |
operations | |
public pure 保有判定: token ==> bool | |
保有判定(aクーポンマスタID) == return exists クーポン in set クーポン一覧 & クーポン.生成元判定(aクーポンマスタID); | |
public 追加: 「クーポン」 ==> () | |
追加(aクーポン) == クーポン一覧 := クーポン一覧 union {aクーポン} | |
post aクーポン in set クーポン一覧 and | |
if aクーポン in set クーポン一覧~ then card クーポン一覧~ = card クーポン一覧 | |
else card クーポン一覧~ + 1 = card クーポン一覧; | |
public 追加: 「クーポン一覧」 ==> () | |
追加(aクーポン一覧) == クーポン一覧 := クーポン一覧 union aクーポン一覧.クーポン一覧 | |
post forall クーポン in set aクーポン一覧.クーポン一覧 & クーポン in set クーポン一覧 and | |
card クーポン一覧 >= card aクーポン一覧.クーポン一覧; | |
public 除外: 「クーポン」 ==> () | |
除外(aクーポン) == クーポン一覧 := クーポン一覧 \ {aクーポン} | |
post aクーポン not in set クーポン一覧 and | |
if aクーポン in set クーポン一覧~ then card クーポン一覧~ = card クーポン一覧 - 1 | |
else card クーポン一覧~ = card クーポン一覧; | |
public pure 保有: 「クーポン」 ==> bool | |
保有(aクーポン) == return aクーポン in set クーポン一覧 | |
post RESULT = aクーポン in set クーポン一覧; | |
public 友達紹介クーポン獲得: () ==> () | |
友達紹介クーポン獲得() == | |
for all クーポン in set クーポン一覧 do | |
クーポン.友達紹介クーポン獲得(); | |
public pure クーポン数: () ==> nat | |
クーポン数() == return card クーポン一覧 | |
post RESULT = card クーポン一覧; | |
end 「クーポン一覧」 | |
class 「顧客条件」 | |
operations | |
public pure 判定: 「顧客」 ==> bool | |
判定(a割引対象) == is subclass responsibility | |
end 「顧客条件」 | |
class 「案件条件」 | |
operations | |
public pure 判定: 「案件」 ==> bool | |
判定(a割引対象) == is subclass responsibility | |
end 「案件条件」 | |
class 「CPM条件」 is subclass of 「顧客条件」 | |
types | |
public 「CPM」 = <未注文客> | <初回客> | <よちよち客> | <こつこつ客> | <優良客> | <離れ客> | |
instance variables | |
private CPM条件: 「CPM」; | |
operations | |
public 「CPM条件」: 「CPM」 ==> 「CPM条件」 | |
「CPM条件」(aCPM条件) == (CPM条件 := aCPM条件); | |
public pure 判定: 「顧客」 ==> bool | |
判定(a割引対象) == return a割引対象.getCPM() = CPM条件 | |
post RESULT = (a割引対象.getCPM() = CPM条件); | |
end 「CPM条件」 | |
class 「サービス条件」 is subclass of 「案件条件」 | |
types | |
public 「サービス」 = <設計> | <製造> | <実装> | <筐体> | <ハーネス> | <メタルマスク> | |
instance variables | |
サービス条件: 「サービス」; | |
operations | |
public 「サービス条件」: 「サービス」 ==> 「サービス条件」 | |
「サービス条件」(aサービス条件) == (サービス条件 := aサービス条件); | |
public pure 判定: 「案件」 ==> bool | |
判定(a割引対象) == return a割引対象.getサービス() = サービス条件 | |
post RESULT = (a割引対象.getサービス() = サービス条件); | |
end 「サービス条件」 | |
class 「製造サービス詳細条件」 is subclass of 「案件条件」 | |
types | |
public 「種類」 = <リジッド> | <フレキ> | <アルミ> | <パネル> | |
instance variables | |
種類条件: 「種類」; | |
operations | |
public 「製造サービス詳細条件」: 「種類」 ==> 「製造サービス詳細条件」 | |
「製造サービス詳細条件」(a種類条件) == (種類条件 := a種類条件); | |
public pure 判定: 「案件」 ==> bool | |
判定(a割引対象) == return a割引対象.get種類() = 種類条件 | |
post RESULT = (a割引対象.get種類() = 種類条件); | |
end 「製造サービス詳細条件」 | |
class 「クーポンコード条件」 is subclass of 「顧客条件」 | |
instance variables | |
クーポンコード: 「クーポンマスタ」`「クーポンコード」; | |
operations | |
public 「クーポンコード条件」: 「クーポンマスタ」`「クーポンコード」 ==> 「クーポンコード条件」 | |
「クーポンコード条件」(aクーポンコード) == (クーポンコード := aクーポンコード); | |
public pure 判定: 「顧客」 ==> bool | |
判定(a割引対象) == return a割引対象.getクーポンコード() = クーポンコード | |
post RESULT = (a割引対象.getクーポンコード() = クーポンコード); | |
end 「クーポンコード条件」 | |
class 「恒真条件」 is subclass of 「顧客条件」 | |
operations | |
public pure 判定: 「顧客」 ==> bool | |
判定(-) == return true; | |
end 「恒真条件」 | |
class 「重複保有不可能条件」 is subclass of 「顧客条件」 | |
instance variables | |
クーポンマスタID: 「クーポンマスタ」`「クーポンマスタID」; | |
operations | |
public 「重複保有不可能条件」: token ==> 「重複保有不可能条件」 | |
「重複保有不可能条件」(aクーポンマスタID) == (クーポンマスタID := aクーポンマスタID); | |
public pure 判定: 「顧客」 ==> bool | |
判定(a割引対象) == return a割引対象.getクーポン一覧().保有判定(クーポンマスタID) | |
post RESULT = a割引対象.getクーポン一覧().保有判定(クーポンマスタID); | |
end 「重複保有不可能条件」 | |
class 「案件AND条件」 is subclass of 「案件条件」 | |
instance variables | |
条件リスト: seq1 of 「案件条件」; | |
operations | |
public 「案件AND条件」: seq1 of 「案件条件」 ==> 「案件AND条件」 | |
「案件AND条件」(a条件リスト) == 条件リスト := a条件リスト; | |
public pure 判定: 「案件」 ==> bool | |
判定(a割引対象) == return forall 条件 in seq 条件リスト & 条件.判定(a割引対象) | |
post RESULT = forall 条件 in seq 条件リスト & 条件.判定(a割引対象); | |
end 「案件AND条件」 | |
class 「顧客AND条件」 is subclass of 「顧客条件」 | |
instance variables | |
条件リスト: seq1 of 「顧客条件」; | |
operations | |
public 「顧客AND条件」: seq1 of 「顧客条件」 ==> 「顧客AND条件」 | |
「顧客AND条件」(a条件リスト) == 条件リスト := a条件リスト; | |
public pure 判定: 「顧客」 ==> bool | |
判定(a割引対象) == return forall 条件 in seq 条件リスト & 条件.判定(a割引対象) | |
post RESULT = forall 条件 in seq 条件リスト & 条件.判定(a割引対象); | |
end 「顧客AND条件」 | |
class 「割引量」 | |
types | |
public 「金額」 = nat | |
operations | |
public pure 割引: 「金額」 ==> 「金額」 | |
割引(-) == is subclass responsibility | |
end 「割引量」 | |
class 「割引率」 is subclass of 「割引量」 | |
instance variables | |
割引率: real; | |
inv 0.0 <= 割引率 and 割引率 <= 1.0; | |
operations | |
public 「割引率」: real ==> 「割引率」 | |
「割引率」(a割引率) == 割引率 := a割引率 | |
pre 0.0 <= a割引率 and a割引率 <= 1.0; | |
public pure 割引: 「金額」 ==> 「金額」 | |
割引(金額) == return 金額 - 金額 * self.割引率 | |
pre 金額 > 0; | |
end 「割引率」 | |
class 「割引額」 is subclass of 「割引量」 | |
instance variables | |
割引額: 「金額」; | |
operations | |
public 「割引額」: 「金額」 ==> 「割引額」 | |
「割引額」(a割引額) == 割引額 := a割引額; | |
public pure 割引: 「金額」 ==> 「金額」 | |
割引(金額) == return 金額 - self.割引額 | |
pre 金額 > 0; | |
end 「割引額」 | |
class 「有効期限条件」 | |
types | |
public 「日付」 = nat; | |
public 「期間」 = nat; | |
operations | |
public pure 判定: 「日付」 ==> bool | |
判定(-) == is subclass responsibility | |
end 「有効期限条件」 | |
class 「特定日付期限」 is subclass of 「有効期限条件」 | |
instance variables | |
特定日付: 「日付」; | |
operations | |
public 「特定日付期限」: 「日付」 ==> 「特定日付期限」 | |
「特定日付期限」(a特定日付) == 特定日付 := a特定日付; | |
public pure 判定: 「日付」 ==> bool | |
判定(a日付) == return a日付 <= 特定日付 | |
post RESULT = (a日付 <= 特定日付); | |
end 「特定日付期限」 | |
class 「発行期日期限」 is subclass of 「有効期限条件」 | |
instance variables | |
発行日: 「日付」; | |
有効期間: 「期間」; | |
operations | |
public 「発行期日期限」: 「日付」 * 「期間」 ==> 「発行期日期限」 | |
「発行期日期限」(a発行日, a有効期間) == atomic(発行日 := a発行日; 有効期間 := a有効期間); | |
public pure 判定: 「日付」 ==> bool | |
判定(a日付) == return a日付 <= 発行日 + 有効期間 | |
post RESULT = (a日付 <= 発行日 + 有効期間); | |
end 「発行期日期限」 | |
class 「クーポンマスタ」 | |
types | |
public 「クーポンコード」 = nat; | |
public 「クーポンマスタID」 = token; | |
instance variables | |
protected クーポンマスタID: 「クーポンマスタID」; | |
protected クーポンコード: [「クーポンコード」]; | |
protected クーポン名: seq1 of char; | |
protected 割引量: 「割引量」; | |
protected 使用可能回数: nat1; | |
operations | |
protected pure 割引対象顧客条件: () ==> 「顧客条件」 | |
割引対象顧客条件() == is subclass responsibility; | |
protected pure クーポン生成: () ==> 「クーポン」 | |
クーポン生成() == is subclass responsibility; | |
public クーポン付与: 「顧客」 ==> bool | |
クーポン付与(a割引対象顧客) == | |
if 割引対象顧客条件().判定(a割引対象顧客) then ( | |
a割引対象顧客.クーポン獲得(クーポン生成()); | |
return true; | |
) else | |
return false | |
post RESULT = 割引対象顧客条件().判定(a割引対象顧客); | |
public pure 同ID判定: token ==> bool | |
同ID判定(aクーポンマスタID) == return クーポンマスタID = aクーポンマスタID | |
post RESULT = (クーポンマスタID = aクーポンマスタID); | |
public pure getクーポンコード: () ==> [「クーポンコード」] | |
getクーポンコード() == return クーポンコード | |
post RESULT = クーポンコード; | |
end 「クーポンマスタ」 | |
class 「クーポン」 | |
instance variables | |
protected クーポンマスタ: 「クーポンマスタ」; | |
protected 残使用回数: nat; | |
protected 使用可能回数: nat; | |
protected 発行日: 「有効期限条件」`「日付」; | |
operations | |
protected pure 割引対象案件条件: () ==> 「案件条件」 | |
割引対象案件条件() == is subclass responsibility; | |
protected pure 有効期限条件: () ==> 「有効期限条件」 | |
有効期限条件() == is subclass responsibility; | |
public pure 有効期限判定: 「有効期限条件」`「日付」 ==> bool | |
有効期限判定(a現在時刻) == 有効期限条件().判定(a現在時刻); | |
public 適用: 「案件」 * 「有効期限条件」`「日付」 ==> bool | |
適用(a割引対象案件, a現在時刻) == | |
if 割引対象案件条件().判定(a割引対象案件) and 有効期限判定(a現在時刻) and 残使用回数 > 0 then ( | |
残使用回数 := 残使用回数 - 1; | |
a割引対象案件.クーポン適用(self); | |
return true | |
) else | |
return false; | |
public 除外: 「案件」 ==> bool | |
除外(a割引対象案件) == ( | |
残使用回数 := 残使用回数 + 1; | |
a割引対象案件.クーポン除外(self); | |
return true | |
); | |
public pure 生成元判定: token ==> bool | |
生成元判定(aクーポンマスタID) == return クーポンマスタ.同ID判定(aクーポンマスタID); | |
public 友達紹介クーポン獲得: () ==> () | |
友達紹介クーポン獲得() == skip; | |
end 「クーポン」 | |
class 「クーポンマスタリポジトリ」 | |
instance variables | |
private static DB: set of 「友達紹介クーポンマスタ」 := {}; | |
operations | |
public static 追加: 「友達紹介クーポンマスタ」 ==> () | |
追加(aクーポンマスタ) == DB := DB union {aクーポンマスタ} | |
pre aクーポンマスタ.getクーポンコード() <> nil | |
post if aクーポンマスタ not in set DB~ then card DB > card DB~ else card DB = card DB~; | |
public static 取得: 「クーポンマスタ」`「クーポンコード」 ==> 「友達紹介クーポンマスタ」 | |
取得(aクーポンコード) == ( | |
let クーポンマスタ in set DB be st クーポンマスタ.getクーポンコード() = aクーポンコード in | |
return クーポンマスタ) | |
pre aクーポンコード in set { クーポンマスタ.getクーポンコード() | クーポンマスタ in set DB }; | |
end 「クーポンマスタリポジトリ」 | |
class 「友達紹介クーポンマスタ」 is subclass of 「クーポンマスタ」 | |
instance variables | |
作成者: 「顧客」; | |
operations | |
public 「友達紹介クーポンマスタ」: 「顧客」 ==> 「友達紹介クーポンマスタ」 | |
「友達紹介クーポンマスタ」(a作成者) == atomic( | |
クーポンコード := MATH`rand(100); | |
クーポン名 := "友達紹介クーポン"; | |
割引量 := new 「割引額」(5000); | |
クーポンマスタID := mk_token("友達紹介クーポン"); | |
使用可能回数 := 1; | |
作成者 := a作成者; | |
); | |
protected pure 割引対象顧客条件: () ==> 「顧客条件」 | |
割引対象顧客条件() == return new 「恒真条件」(); | |
protected pure クーポン生成: () ==> 「クーポン」 | |
クーポン生成() == return new 「友達紹介クーポン」(self.使用可能回数); | |
public クーポン付与: 「顧客」 ==> bool | |
クーポン付与(a割引対象顧客) == | |
if 割引対象顧客条件().判定(a割引対象顧客) then ( | |
a割引対象顧客.クーポン獲得(クーポン生成()); | |
return true; | |
) else | |
return false | |
post RESULT = 割引対象顧客条件().判定(a割引対象顧客); | |
public pure 被紹介クーポンマスタ生成: () ==> 「友達被紹介クーポンマスタ」 | |
被紹介クーポンマスタ生成() == return new 「友達被紹介クーポンマスタ」(クーポンコード, 作成者, self); | |
public pure getクーポンコード: () ==> [「クーポンコード」] | |
getクーポンコード() == return クーポンコード | |
post クーポンコード <> nil; | |
end 「友達紹介クーポンマスタ」 | |
class 「友達紹介クーポン」 is subclass of 「クーポン」 | |
operations | |
public 「友達紹介クーポン」: nat ==> 「友達紹介クーポン」 | |
「友達紹介クーポン」(a残使用回数) == atomic( | |
残使用回数 := a残使用回数; | |
発行日 := 0; | |
); | |
protected pure 割引対象案件条件: () ==> 「案件条件」 | |
割引対象案件条件() == return new 「案件AND条件」([ | |
new 「サービス条件」(<製造>), | |
new 「案件AND条件」([ | |
new 「製造サービス詳細条件」(<リジッド>), | |
new 「製造サービス詳細条件」(<フレキ>), | |
new 「製造サービス詳細条件」(<アルミ>) | |
]) | |
]); | |
protected pure 有効期限条件: () ==> 「有効期限条件」 | |
有効期限条件() == return new 「発行期日期限」(発行日, 30); | |
end 「友達紹介クーポン」 | |
class 「友達被紹介クーポンマスタ」 is subclass of 「クーポンマスタ」 | |
instance variables | |
紹介者: 「顧客」; | |
友達紹介クーポンマスタ: 「友達紹介クーポンマスタ」; | |
operations | |
public 「友達被紹介クーポンマスタ」: [「クーポンコード」] * 「顧客」 * 「友達紹介クーポンマスタ」 ==> 「友達被紹介クーポンマスタ」 | |
「友達被紹介クーポンマスタ」(aクーポンコード, a紹介者, a友達紹介クーポンマスタ) == atomic( | |
クーポンコード := aクーポンコード; | |
クーポン名 := "友達被紹介クーポン"; | |
割引量 := new 「割引額」(5000); | |
クーポンマスタID := mk_token("友達被紹介クーポン"); | |
使用可能回数 := 1; | |
紹介者 := a紹介者; | |
友達紹介クーポンマスタ := a友達紹介クーポンマスタ; | |
); | |
protected pure 割引対象顧客条件: () ==> 「顧客条件」 | |
割引対象顧客条件() == return new 「顧客AND条件」([ | |
new 「CPM条件」(<未注文客>), | |
new 「クーポンコード条件」(クーポンコード), | |
new 「重複保有不可能条件」(クーポンマスタID) | |
]); | |
protected pure クーポン生成: () ==> 「クーポン」 | |
クーポン生成() == return new 「友達被紹介クーポン」(紹介者, 友達紹介クーポンマスタ, self.使用可能回数); | |
public クーポン付与: 「顧客」 ==> bool | |
クーポン付与(a割引対象顧客) == | |
if 割引対象顧客条件().判定(a割引対象顧客) then ( | |
a割引対象顧客.クーポン獲得(クーポン生成()); | |
return true; | |
) else | |
return false | |
post RESULT = 割引対象顧客条件().判定(a割引対象顧客); | |
public pure getクーポンコード: () ==> [「クーポンコード」] | |
getクーポンコード() == return クーポンコード | |
post クーポンコード <> nil; | |
end 「友達被紹介クーポンマスタ」 | |
class 「友達被紹介クーポン」 is subclass of 「クーポン」 | |
instance variables | |
紹介者: 「顧客」; | |
友達紹介クーポンマスタ: 「友達紹介クーポンマスタ」; | |
operations | |
public 「友達被紹介クーポン」: 「顧客」 * 「友達紹介クーポンマスタ」 * nat ==> 「友達被紹介クーポン」 | |
「友達被紹介クーポン」(a紹介者, a友達紹介クーポンマスタ, a残使用回数) == atomic( | |
紹介者 := a紹介者; | |
友達紹介クーポンマスタ := a友達紹介クーポンマスタ; | |
残使用回数 := a残使用回数; | |
発行日 := 0; | |
); | |
protected pure 割引対象案件条件: () ==> 「案件条件」 | |
割引対象案件条件() == return new 「案件AND条件」([ | |
new 「サービス条件」(<製造>), | |
new 「案件AND条件」([ | |
new 「製造サービス詳細条件」(<リジッド>), | |
new 「製造サービス詳細条件」(<フレキ>), | |
new 「製造サービス詳細条件」(<アルミ>) | |
]) | |
]); | |
protected pure 有効期限条件: () ==> 「有効期限条件」 | |
有効期限条件() == return new 「発行期日期限」(発行日, 30); | |
public 友達紹介クーポン獲得: () ==> () | |
友達紹介クーポン獲得() == | |
let - = 友達紹介クーポンマスタ.クーポン付与(紹介者) in skip; | |
end 「友達被紹介クーポン」 | |
class 「クーポン一覧表示」 | |
operations | |
private pure クーポン一覧を表示する: 「顧客」 ==> 「クーポン一覧」 | |
クーポン一覧を表示する(a顧客) == return a顧客.getクーポン一覧(); | |
public pure 見積時にクーポン一覧を表示する: 「顧客」 ==> 「クーポン一覧」 | |
見積時にクーポン一覧を表示する(a顧客) == クーポン一覧を表示する(a顧客); | |
public pure 見積保存後にクーポン一覧を表示する: 「顧客」 ==> 「クーポン一覧」 | |
見積保存後にクーポン一覧を表示する(a顧客) == クーポン一覧を表示する(a顧客); | |
public pure 注文時にクーポン一覧を表示する: 「顧客」 ==> 「クーポン一覧」 | |
注文時にクーポン一覧を表示する(a顧客) == クーポン一覧を表示する(a顧客); | |
public pure マイページにクーポン一覧を表示する: 「顧客」 ==> 「クーポン一覧」 | |
マイページにクーポン一覧を表示する(a顧客) == クーポン一覧を表示する(a顧客); | |
public pure 技術サポートにクーポン一覧を表示する: 「顧客」 ==> 「クーポン一覧」 | |
技術サポートにクーポン一覧を表示する(a顧客) == クーポン一覧を表示する(a顧客); | |
public クーポンの適用状況を表示する: token ==> token | |
クーポンの適用状況を表示する(-) == is not yet specified; | |
end 「クーポン一覧表示」 | |
class 「クーポンコード獲得」 | |
operations | |
public クーポンコードを表示する: 「顧客」 ==> 「クーポンマスタ」`「クーポンコード」 | |
クーポンコードを表示する(a顧客) == | |
let 友達紹介クーポンマスタ = new 「友達紹介クーポンマスタ」(a顧客) in | |
(「クーポンマスタリポジトリ」`追加(友達紹介クーポンマスタ); | |
return 友達紹介クーポンマスタ.getクーポンコード()) | |
traces | |
trace_クーポンコードを表示する: ( | |
let 顧客A = new 「顧客」(<未注文客>, 10, new 「クーポン一覧」(), new 「案件一覧」()) in | |
クーポンコードを表示する(顧客A) | |
); | |
end 「クーポンコード獲得」 | |
class 「クーポン獲得」 | |
operations | |
private クーポンを獲得させる: 「クーポンマスタ」`「クーポンコード」 * 「顧客」 ==> bool | |
クーポンを獲得させる(aクーポンコード, a顧客) == | |
let クーポンマスタ = 「クーポンマスタリポジトリ」`取得(aクーポンコード) in | |
クーポンマスタ.クーポン付与(a顧客); | |
public 顧客新規登録時にクーポンを獲得させる: 「クーポンマスタ」`「クーポンコード」 * 「顧客」 ==> bool | |
顧客新規登録時にクーポンを獲得させる(aクーポンコード, a顧客) == return クーポンを獲得させる(aクーポンコード, a顧客); | |
public マイページからクーポンを獲得させる: 「クーポンマスタ」`「クーポンコード」 * 「顧客」 ==> bool | |
マイページからクーポンを獲得させる(aクーポンコード, a顧客) == return クーポンを獲得させる(aクーポンコード, a顧客); | |
public 技術サポートからクーポンを獲得させる: 「クーポンマスタ」`「クーポンコード」 * 「顧客」 ==> bool | |
技術サポートからクーポンを獲得させる(aクーポンコード, a顧客) == return クーポンを獲得させる(aクーポンコード, a顧客); | |
public 紹介者にクーポンを獲得させる: 「案件」 ==> () | |
紹介者にクーポンを獲得させる(a案件) == a案件.友達紹介クーポン獲得(); | |
public TEST_クーポンを獲得させる: () ==> bool | |
TEST_クーポンを獲得させる() == ( | |
let 顧客A = new 「顧客」(<未注文客>, 10, new 「クーポン一覧」(), new 「案件一覧」()) in | |
let クーポンコード獲得 = new 「クーポンコード獲得」() in | |
let クーポンコード = クーポンコード獲得.クーポンコードを表示する(顧客A) in | |
let 顧客B = new 「顧客」(<未注文客>, クーポンコード, new 「クーポン一覧」(), new 「案件一覧」()) in | |
return 顧客新規登録時にクーポンを獲得させる(クーポンコード, 顧客B); | |
); | |
public TEST_紹介者にクーポンを獲得させる: () ==> nat | |
TEST_紹介者にクーポンを獲得させる() == ( | |
let 顧客A = new 「顧客」(<未注文客>, nil, new 「クーポン一覧」(), new 「案件一覧」()) in | |
let クーポンコード獲得 = new 「クーポンコード獲得」() in | |
let クーポンコード = クーポンコード獲得.クーポンコードを表示する(顧客A) in | |
let 顧客B = new 「顧客」(<未注文客>, クーポンコード, new 「クーポン一覧」(), new 「案件一覧」()) in | |
let 案件 = new 「案件」(<製造>, <リジッド>) in | |
(dcl result: bool := 顧客新規登録時にクーポンを獲得させる(クーポンコード, 顧客B); | |
案件.クーポン適用(顧客B.getクーポン一覧()); | |
案件.請書発行(); | |
紹介者にクーポンを獲得させる(案件); | |
顧客A.getクーポン一覧().クーポン数()) | |
); | |
traces | |
trace_クーポンを獲得させる: TEST_クーポンを獲得させる(); | |
trace_紹介者にクーポンを獲得させる: TEST_紹介者にクーポンを獲得させる(); | |
end 「クーポン獲得」 | |
class 「有効期限通知」 | |
operations | |
private pure 有効期限切れのクーポンを通知する: 「クーポン」 * 「有効期限条件」`「日付」 ==> bool | |
有効期限切れのクーポンを通知する(aクーポン, a現在時刻) == aクーポン.有効期限判定(a現在時刻); | |
public 注文時に期限切れを通知する: 「クーポン」 * 「有効期限条件」`「日付」 ==> bool | |
注文時に期限切れを通知する(aクーポン, a現在時刻) == 有効期限切れのクーポンを通知する(aクーポン, a現在時刻); | |
public メールで期限切れを通知する: 「クーポン」 * 「有効期限条件」`「日付」 ==> bool | |
メールで期限切れを通知する(aクーポン, a現在時刻) == 有効期限切れのクーポンを通知する(aクーポン, a現在時刻); | |
public メールで期限切れ前日に警告する: 「クーポン」 * 「有効期限条件」`「日付」 ==> bool | |
メールで期限切れ前日に警告する(aクーポン, a現在時刻) == | |
return 有効期限切れのクーポンを通知する(aクーポン, a現在時刻) and not 有効期限切れのクーポンを通知する(aクーポン, a現在時刻 + 1); | |
end 「有効期限通知」 | |
class 「クーポン利用」 | |
operations | |
public クーポンを適用する: 「案件」 * 「クーポン」 * 「有効期限条件」`「日付」 ==> bool | |
クーポンを適用する(a案件, aクーポン, a現在時刻) == return aクーポン.適用(a案件, a現在時刻); | |
public クーポンを除外する: 「案件」 * 「クーポン」 ==> bool | |
クーポンを除外する(a案件, aクーポン) == return aクーポン.除外(a案件); | |
end 「クーポン利用」 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment