Browse Source

pay type to payment. handle [payment,add] route

Andrii Zadorozhnii 11 years ago
parent
commit
ecfc2669a3
7 changed files with 28 additions and 25 deletions
  1. 0 4
      include/membership.hrl
  2. 4 2
      include/payments.hrl
  3. 5 3
      include/products.hrl
  4. 3 5
      src/kvs_membership.erl
  5. 14 10
      src/kvs_payment.erl
  6. 1 0
      src/kvs_products.erl
  7. 1 1
      src/kvs_purchase.erl

+ 0 - 4
include/membership.hrl

@@ -1,9 +1,5 @@
-
--type payment_type():: credit_card | mobile | paypal | wire_transfer | facebook.
-
 -record(membership, {
         id                         :: any(),      % package id
-        payment_type               :: payment_type(),
         no                         :: integer(),  % package number (need to display in pricelist)
         amount                     :: integer(),  % price
         currency                   :: integer(),  % currency charge

+ 4 - 2
include/payments.hrl

@@ -1,6 +1,6 @@
-
 -type payment_state() :: added | done | cancelled | pending | untracked |
                          failed | unknown | confirmed | discarded.
+-type payment_type():: credit_card | mobile | paypal | wire_transfer | facebook.
 
 -record(state_change, {
         time     :: erlang:now(),
@@ -11,8 +11,10 @@
         id              :: any(),
         external_id     :: any(),     % id of the purchase in external payment system if any
         user_id         :: any(),
+        payment_type    :: payment_type(),
         state           :: payment_state(),
-        membership      :: #membership{},
+        membership,
+        product,
         next            :: any(),
         prev            :: any(),
         start_time      :: erlang:now(),

+ 5 - 3
include/products.hrl

@@ -23,11 +23,13 @@
         cover,
         publish_start_date     :: calendar:date_time(), % admin
         publish_end_date       :: calendar:date_time(), % admin
-        currency,
-        price,
+        price                  :: integer(),
+        currency               :: integer(),  % currency charge
         retailer_price         :: integer(), % ext
         our_price              :: integer(), % auto
-        enabled_on_site        :: boolean(), % admin
+        fee                    :: integer(),  % net membership fee
+        enabled                :: boolean(), % admin
+        for_sale               :: boolean(),
         creation_date          :: calendar:date_time(), % auto
         modify_date            :: calendar:date_time() }).
 

+ 3 - 5
src/kvs_membership.erl

@@ -2,14 +2,12 @@
 -author('Vladimir Baranov <baranoff.vladimir@gmail.com>').
 -include_lib("kvs/include/membership.hrl").
 -include_lib("kvs/include/payments.hrl").
+-include_lib("kvs/include/products.hrl").
 -include_lib("kvs/include/log.hrl").
 -include_lib("kvs/include/accounts.hrl").
 -include_lib("kvs/include/feed_state.hrl").
 -compile(export_all).
 
--type package_id() :: integer().
--type list_options()::[{payment_type, payment_type()}|{available_for_sale, boolean()}].
-
 add_package(#membership{}=Package)->
     Id = generate_id(),
     save_package(Package#membership{id = Id}).
@@ -42,7 +40,7 @@ add_sample_data()->
     #membership{no = 7, amount = 50,  currency = 0,  quota = 90,  fee = 50},
     #membership{no = 8, amount = 100, currency = 40, quota = 120, fee = 60}],
     WithPaymentTypes = [
-        Package#membership{id = Package#membership.no, payment_type=Payment} ||
+        Package#membership{id = Package#membership.no} ||
             Payment <- [facebook, credit_card, wire_transfer, paypal, mobile],
             Package <- SamplePackages],
     Enabled = [P#membership{available_for_sale = true} || P <- WithPaymentTypes],
@@ -64,7 +62,7 @@ timestamp()->
 
 check_conditions(_, _, false) -> false;
 check_conditions([{available_for_sale, AS}|T], MP = #membership{available_for_sale = AS1}, _) -> check_conditions(T, MP, AS == AS1);
-check_conditions([{payment_type, PT}|T], MP = #membership{payment_type = PT1}, _) -> check_conditions(T, MP, PT == PT1);
+check_conditions([{payment_type, PT}|T], MP = #membership{}, _) -> check_conditions(T, MP, true);
 check_conditions([], _, true) -> true.
 
 delete_package(PackageId) -> kvs:delete(membership, PackageId).

+ 14 - 10
src/kvs_payment.erl

@@ -55,7 +55,7 @@ add_payment(#payment{} = MP, State0, Info) ->
 add_to_user(UserId,Payment) ->
     {ok,Team} = case kvs:get(user_payment, UserId) of
                      {ok,T} -> {ok,T};
-                     _ -> ?INFO("user_payment not found ~p. create top",[UserId]),
+                     _ -> error_logger:info_msg("user_payment not found ~p. create top",[UserId]),
                           Head = #user_payment{ user = UserId, top = undefined},
                           {kvs:put(Head),Head} end,
 
@@ -74,7 +74,7 @@ add_to_user(UserId,Payment) ->
 
     Entry  = Payment#payment{id = EntryId, user_id = UserId, next = Next, prev = Prev},
     case kvs:put(Entry) of ok -> {ok, EntryId};
-                           Error -> ?INFO("Cant write purchase"), {failure,Error} end.
+                           Error -> error_logger:info_msg("Cant write purchase"), {failure,Error} end.
 
 set_payment_state(MPId, NewState, Info) ->
     case kvs:get(payment, MPId) of 
@@ -102,7 +102,7 @@ set_payment_state(MPId, NewState, Info) ->
 
     ok;
 
-    Error -> ?INFO("Can't set purchase state, not yet in db"), Error
+    Error -> error_logger:info_msg("Can't set purchase state, not yet in db"), Error
     end.
 
 set_payment_info(MPId, Info) ->
@@ -123,35 +123,39 @@ list_payments(SelectOptions) ->
 
 payment_id() ->
     NextId = kvs:next_id("payment"),
-    lists:concat([kvs_membership:timestamp(), "_", NextId]).
+    lists:concat([timestamp(), "_", NextId]).
 
 handle_notice(["kvs_payment", "user", _, "set_state"] = Route,
     Message, #state{owner = Owner, type =Type} = State) ->
-    ?INFO("queue_action(~p): set_purchase_state: Owner=~p, Route=~p, Message=~p", [self(), {Type, Owner}, Route, Message]),  
+    error_logger:info_msg("queue_action(~p): set_purchase_state: Owner=~p, Route=~p, Message=~p", [self(), {Type, Owner}, Route, Message]),  
     {MPId, NewState, Info} = Message,
     set_payment_state(MPId, NewState, Info),
     {noreply, State};
 
-handle_notice(["kvs_payment", "user", _, "add"] = Route,
+handle_notice([kvs_payment, user, Owner, add] = Route,
     Message, #state{owner = Owner, type =Type} = State) ->
-    ?INFO("queue_action(~p): add_purchase: Owner=~p, Route=~p, Message=~p", [self(), {Type, Owner}, Route, Message]),    
+    error_logger:info_msg("queue_action(~p): add_purchase: Owner=~p, Route=~p, Message=~p", [self(), {Type, Owner}, Route, Message]),    
     {MP} = Message,
     add_payment(MP),
     {noreply, State};
 
 handle_notice(["kvs_payment", "user", _, "set_external_id"] = Route,
     Message, #state{owner = Owner, type =Type} = State) ->
-    ?INFO("queue_action(~p): set_purchase_external_id: Owner=~p, Route=~p, Message=~p", [self(), {Type, Owner}, Route, Message]),
+    error_logger:info_msg("queue_action(~p): set_purchase_external_id: Owner=~p, Route=~p, Message=~p", [self(), {Type, Owner}, Route, Message]),
     {PurchaseId, TxnId} = Message,
     set_payment_external_id(PurchaseId, TxnId),
     {noreply, State};
 
 handle_notice(["kvs_payment", "user", _, "set_info"] = Route,
     Message, #state{owner = Owner, type =Type} = State) ->
-    ?INFO("queue_action(~p): set_purchase_info: Owner=~p, Route=~p, Message=~p", [self(), {Type, Owner}, Route, Message]),
+    error_logger:info_msg("queue_action(~p): set_purchase_info: Owner=~p, Route=~p, Message=~p", [self(), {Type, Owner}, Route, Message]),
     {OrderId, Info} = Message,
     set_payment_info(OrderId, Info),
     {noreply, State};
 
-handle_notice(Route, Message, State) -> error_logger:info_msg("Unknown PAYMENTS notice").
+handle_notice(Route, Message, State) -> error_logger:info_msg("Unknown PAYMENTS notice ~p for: ~p, ~p", [Route, State#state.owner, State#state.type]), {noreply, State}.
 
+timestamp()->
+  {Y, Mn, D} = erlang:date(),
+  {H, M, S} = erlang:time(),
+  lists:flatten(io_lib:format("~b~2..0b~2..0b_~2..0b~2..0b~2..0b", [Y, Mn, D, H, M, S])).

+ 1 - 0
src/kvs_products.erl

@@ -3,6 +3,7 @@
 -include_lib("kvs/include/products.hrl").
 -include_lib("kvs/include/users.hrl").
 -include_lib("kvs/include/groups.hrl").
+-include_lib("kvs/include/feeds.hrl").
 -include_lib("kvs/include/accounts.hrl").
 -include_lib("kvs/include/log.hrl").
 -include_lib("kvs/include/config.hrl").

+ 1 - 1
src/kvs_purchase.erl

@@ -37,4 +37,4 @@ handle_notice(["kvs_purchase", "user", UId, "give"] = Route,
     give(UId, GId),
     {noreply, State};
 
-handle_notice(_,_,_) -> error_logger:info_msg("Unknown PURCHASE notice").
+handle_notice(R,_,S) -> error_logger:info_msg("Unhandled PURCHASE notice ~p", [R]), {noreply, S}.