http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/08c553f9/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/domain/ShareAccountTransaction.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/domain/ShareAccountTransaction.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/domain/ShareAccountTransaction.java
new file mode 100644
index 0000000..384e94f
--- /dev/null
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/domain/ShareAccountTransaction.java
@@ -0,0 +1,209 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.portfolio.shareaccounts.domain;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+import org.hibernate.annotations.LazyCollection;
+import org.hibernate.annotations.LazyCollectionOption;
+import org.springframework.data.jpa.domain.AbstractPersistable;
+
+@Entity
+@Table(name = "m_share_account_transactions")
+public class ShareAccountTransaction extends AbstractPersistable<Long> {
+
+    @ManyToOne(optional = false)
+    @JoinColumn(name = "account_id", referencedColumnName = "id", nullable = 
false)
+    private ShareAccount shareAccount;
+
+    @Column(name = "transaction_date")
+    @Temporal(TemporalType.DATE)
+    private Date transactionDate;
+
+    @Column(name = "total_shares")
+    private Long totalShares;
+
+    @Column(name = "unit_price")
+    private BigDecimal shareValue;
+
+    @Column(name = "amount") 
+    private BigDecimal amount ;
+    
+    @Column(name = "charge_amount") 
+    private BigDecimal totalChargeAmount ;
+    
+    @Column(name = "status_enum", nullable = true)
+    private Integer status;
+
+    @Column(name = "type_enum", nullable = true) 
+    private Integer type ;
+    
+    @LazyCollection(LazyCollectionOption.FALSE)
+    @OneToMany(cascade = CascadeType.ALL, mappedBy = 
"shareAccountTransaction", orphanRemoval = true)
+    private final Set<ShareAccountChargePaidBy> shareAccountChargesPaid = new 
HashSet<>();
+    
+    protected ShareAccountTransaction() {
+
+    }
+
+    public void setShareAccount(final ShareAccount shareAccount) {
+        this.shareAccount = shareAccount;
+    }
+
+    public ShareAccountTransaction(final Date transactionDate, final Long 
totalShares, final BigDecimal shareValue) {
+        this.transactionDate = transactionDate;
+        this.totalShares = totalShares;
+        this.shareValue = shareValue;
+        this.status = PurchasedSharesStatusType.APPLIED.getValue();
+        this.type = PurchasedSharesStatusType.PURCHASED.getValue() ;
+        this.amount = shareValue.multiply(BigDecimal.valueOf(totalShares)) ;
+    }
+
+    private ShareAccountTransaction(final Date transactionDate, final Long 
totalShares, final BigDecimal shareValue,
+            final Integer status, final Integer type, final BigDecimal amount, 
final BigDecimal chargeAmount) {
+        this.transactionDate = transactionDate;
+        this.totalShares = totalShares;
+        this.shareValue = shareValue;
+        this.status = status ;
+        this.type = type ;
+        this.amount = amount ;
+        this.totalChargeAmount = chargeAmount ;
+    }
+    
+    public static ShareAccountTransaction createRedeemTransaction(final Date 
transactionDate, final Long totalShares, final BigDecimal shareValue) {
+        final Integer status = PurchasedSharesStatusType.APPROVED.getValue() ;
+        final Integer type = PurchasedSharesStatusType.REDEEMED.getValue() ;
+        final BigDecimal amount = 
shareValue.multiply(BigDecimal.valueOf(totalShares)) ;
+        return new ShareAccountTransaction(transactionDate, totalShares, 
shareValue, status, type, amount, null) ; 
+    }
+    
+    public static ShareAccountTransaction createChargeTransaction(final Date 
transactionDate, final ShareAccountCharge charge) {
+       final Long totalShares = null ;
+       final BigDecimal unitPrice = null ;
+       final Integer status = PurchasedSharesStatusType.APPROVED.getValue() ;
+       final Integer type = 
PurchasedSharesStatusType.CHARGE_PAYMENT.getValue() ;
+       BigDecimal amount = charge.percentageOrAmount() ;
+       BigDecimal chargeAmount = amount ;
+       return new ShareAccountTransaction(transactionDate, totalShares, 
unitPrice, status, type, amount, chargeAmount) ;
+    }
+    
+    public Date getPurchasedDate() {
+        return this.transactionDate;
+    }
+
+    public Long getTotalShares() {
+        return this.totalShares;
+    }
+
+    public BigDecimal getPurchasePrice() {
+        return this.shareValue;
+    }
+
+    public void update(final Date purchasedDate, final Long totalShares, final 
BigDecimal shareValue) {
+        this.transactionDate = purchasedDate;
+        this.totalShares = totalShares;
+        this.shareValue = shareValue;
+        this.amount = shareValue.multiply(BigDecimal.valueOf(totalShares)) ;
+        this.status = PurchasedSharesStatusType.APPLIED.getValue();
+    }
+
+    public void approve() {
+        this.status = PurchasedSharesStatusType.APPROVED.getValue() ;
+    }
+    
+    public void undoApprove() {
+        this.status = PurchasedSharesStatusType.APPLIED.getValue() ;
+    }
+
+    public void reject() {
+       this.status = PurchasedSharesStatusType.REJECTED.getValue() ;
+       if(this.totalChargeAmount != null) {
+           this.amount = this.amount.subtract(totalChargeAmount) ;
+       }
+    }
+    
+    public boolean isPendingForApprovalTransaction() {
+        return 
this.status.equals(PurchasedSharesStatusType.APPLIED.getValue()) && 
this.type.equals(PurchasedSharesStatusType.PURCHASED.getValue()) ;
+    }
+    
+    public boolean isPurchasTransaction() {
+        return 
this.status.equals(PurchasedSharesStatusType.APPROVED.getValue()) && 
this.type.equals(PurchasedSharesStatusType.PURCHASED.getValue()) ;
+    }
+    
+    public boolean isRedeemTransaction() {
+        return 
this.status.equals(PurchasedSharesStatusType.APPROVED.getValue()) && 
this.type.equals(PurchasedSharesStatusType.REDEEMED.getValue()) ;
+    }
+    
+    public boolean isChargeTransaction() {
+        return 
this.status.equals(PurchasedSharesStatusType.APPROVED.getValue()) && 
this.type.equals(PurchasedSharesStatusType.CHARGE_PAYMENT.getValue()) ;
+    }
+    
+    public void addShareAccountChargePaidBy(final ShareAccountChargePaidBy 
chargePaidBy) {
+        this.shareAccountChargesPaid.add(chargePaidBy) ;
+    }
+    
+    public BigDecimal amount() {
+        return this.amount ;
+    }
+
+    public BigDecimal chargeAmount() {
+        return this.totalChargeAmount ;
+    }
+    
+    public void updateChargeAmount(BigDecimal totalChargeAmount) {
+        this.amount = this.amount.add(totalChargeAmount);
+        this.totalChargeAmount = totalChargeAmount ;
+    }
+    
+    public void deductChargesFromTotalAmount(BigDecimal totalChargeAmount) {
+        this.amount = this.amount.subtract(totalChargeAmount);
+        this.totalChargeAmount = totalChargeAmount ;
+    }
+    
+    public Set<ShareAccountChargePaidBy> getChargesPaidBy() {
+        return this.shareAccountChargesPaid ;
+    }
+    
+    public Integer getTransactionStatus() {
+        return this.status ;
+    }
+    
+    public Integer getTransactionType() {
+        return this.type ;
+    }
+    
+    public void adjustRedeemAmount() {
+        if(this.totalChargeAmount != null) {
+            this.amount = this.amount.subtract(totalChargeAmount) ;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/08c553f9/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/exceptions/IssueableSharesExceededException.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/exceptions/IssueableSharesExceededException.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/exceptions/IssueableSharesExceededException.java
new file mode 100644
index 0000000..c924df0
--- /dev/null
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/exceptions/IssueableSharesExceededException.java
@@ -0,0 +1,31 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.portfolio.shareaccounts.exceptions;
+
+import 
org.apache.fineract.infrastructure.core.exception.AbstractPlatformResourceNotFoundException;
+
+/**
+ * A {@link RuntimeException} 
+ */
+public class IssueableSharesExceededException extends 
AbstractPlatformResourceNotFoundException {
+
+    public IssueableSharesExceededException() {
+        super("error.msg.shares.issuable.shares.exceeded", "Issueable Shares 
exceeded than product definition");
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/08c553f9/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/ActivateShareAccountCommandHandler.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/ActivateShareAccountCommandHandler.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/ActivateShareAccountCommandHandler.java
new file mode 100644
index 0000000..f40f2dc
--- /dev/null
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/ActivateShareAccountCommandHandler.java
@@ -0,0 +1,47 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.portfolio.shareaccounts.handler;
+
+import org.apache.fineract.commands.annotation.CommandType;
+import org.apache.fineract.commands.handler.NewCommandSourceHandler;
+import org.apache.fineract.infrastructure.core.api.JsonCommand;
+import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
+import 
org.apache.fineract.portfolio.shareaccounts.service.ShareAccountWritePlatformService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+@CommandType(entity = "SHAREACCOUNT", action = "ACTIVATE")
+public class ActivateShareAccountCommandHandler implements 
NewCommandSourceHandler{
+
+
+    private final ShareAccountWritePlatformService 
shareAccountWritePlatformService ;
+    
+    @Autowired
+    public ActivateShareAccountCommandHandler(final 
ShareAccountWritePlatformService shareAccountWritePlatformService) {
+        this.shareAccountWritePlatformService = 
shareAccountWritePlatformService ;
+    }
+    @Transactional
+    @Override
+    public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
+        return 
this.shareAccountWritePlatformService.activateShareAccount(jsonCommand.entityId(),
 jsonCommand);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/08c553f9/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/ApplyAddtionalSharesCommandHandler.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/ApplyAddtionalSharesCommandHandler.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/ApplyAddtionalSharesCommandHandler.java
new file mode 100644
index 0000000..ce9c7dd
--- /dev/null
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/ApplyAddtionalSharesCommandHandler.java
@@ -0,0 +1,47 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.portfolio.shareaccounts.handler;
+
+import org.apache.fineract.commands.annotation.CommandType;
+import org.apache.fineract.commands.handler.NewCommandSourceHandler;
+import org.apache.fineract.infrastructure.core.api.JsonCommand;
+import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
+import 
org.apache.fineract.portfolio.shareaccounts.service.ShareAccountWritePlatformService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+@CommandType(entity = "SHAREACCOUNT", action = "APPLYADDITIONALSHARES")
+public class ApplyAddtionalSharesCommandHandler implements 
NewCommandSourceHandler{
+
+
+    private final ShareAccountWritePlatformService 
shareAccountWritePlatformService ;
+    
+    @Autowired
+    public ApplyAddtionalSharesCommandHandler(final 
ShareAccountWritePlatformService shareAccountWritePlatformService) {
+        this.shareAccountWritePlatformService = 
shareAccountWritePlatformService ;
+    }
+    @Transactional
+    @Override
+    public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
+        return 
this.shareAccountWritePlatformService.applyAddtionalShares(jsonCommand.entityId(),
 jsonCommand);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/08c553f9/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/ApproveAddtionalSharesCommandHandler.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/ApproveAddtionalSharesCommandHandler.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/ApproveAddtionalSharesCommandHandler.java
new file mode 100644
index 0000000..4d81eeb
--- /dev/null
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/ApproveAddtionalSharesCommandHandler.java
@@ -0,0 +1,47 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.portfolio.shareaccounts.handler;
+
+import org.apache.fineract.commands.annotation.CommandType;
+import org.apache.fineract.commands.handler.NewCommandSourceHandler;
+import org.apache.fineract.infrastructure.core.api.JsonCommand;
+import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
+import 
org.apache.fineract.portfolio.shareaccounts.service.ShareAccountWritePlatformService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+@CommandType(entity = "SHAREACCOUNT", action = "APPROVEADDITIONALSHARES")
+public class ApproveAddtionalSharesCommandHandler implements 
NewCommandSourceHandler{
+
+
+    private final ShareAccountWritePlatformService 
shareAccountWritePlatformService ;
+    
+    @Autowired
+    public ApproveAddtionalSharesCommandHandler(final 
ShareAccountWritePlatformService shareAccountWritePlatformService) {
+        this.shareAccountWritePlatformService = 
shareAccountWritePlatformService ;
+    }
+    @Transactional
+    @Override
+    public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
+        return 
this.shareAccountWritePlatformService.approveAdditionalShares(jsonCommand.entityId(),
 jsonCommand);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/08c553f9/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/ApproveShareAccountCommandHandler.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/ApproveShareAccountCommandHandler.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/ApproveShareAccountCommandHandler.java
new file mode 100644
index 0000000..194627a
--- /dev/null
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/ApproveShareAccountCommandHandler.java
@@ -0,0 +1,47 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.portfolio.shareaccounts.handler;
+
+import org.apache.fineract.commands.annotation.CommandType;
+import org.apache.fineract.commands.handler.NewCommandSourceHandler;
+import org.apache.fineract.infrastructure.core.api.JsonCommand;
+import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
+import 
org.apache.fineract.portfolio.shareaccounts.service.ShareAccountWritePlatformService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+@CommandType(entity = "SHAREACCOUNT", action = "APPROVE")
+public class ApproveShareAccountCommandHandler implements 
NewCommandSourceHandler{
+
+
+    private final ShareAccountWritePlatformService 
shareAccountWritePlatformService ;
+    
+    @Autowired
+    public ApproveShareAccountCommandHandler(final 
ShareAccountWritePlatformService shareAccountWritePlatformService) {
+        this.shareAccountWritePlatformService = 
shareAccountWritePlatformService ;
+    }
+    @Transactional
+    @Override
+    public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
+        return 
this.shareAccountWritePlatformService.approveShareAccount(jsonCommand.entityId(),
 jsonCommand);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/08c553f9/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/CloseShareAccountCommandHandler.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/CloseShareAccountCommandHandler.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/CloseShareAccountCommandHandler.java
new file mode 100644
index 0000000..62fefa4
--- /dev/null
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/CloseShareAccountCommandHandler.java
@@ -0,0 +1,47 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.portfolio.shareaccounts.handler;
+
+import org.apache.fineract.commands.annotation.CommandType;
+import org.apache.fineract.commands.handler.NewCommandSourceHandler;
+import org.apache.fineract.infrastructure.core.api.JsonCommand;
+import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
+import 
org.apache.fineract.portfolio.shareaccounts.service.ShareAccountWritePlatformService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+@CommandType(entity = "SHAREACCOUNT", action = "CLOSE")
+public class CloseShareAccountCommandHandler implements 
NewCommandSourceHandler{
+
+
+    private final ShareAccountWritePlatformService 
shareAccountWritePlatformService ;
+    
+    @Autowired
+    public CloseShareAccountCommandHandler(final 
ShareAccountWritePlatformService shareAccountWritePlatformService) {
+        this.shareAccountWritePlatformService = 
shareAccountWritePlatformService ;
+    }
+    @Transactional
+    @Override
+    public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
+        return 
this.shareAccountWritePlatformService.closeShareAccount(jsonCommand.entityId(), 
jsonCommand);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/08c553f9/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/CreateShareAccountCommandHandler.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/CreateShareAccountCommandHandler.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/CreateShareAccountCommandHandler.java
new file mode 100644
index 0000000..5226d32
--- /dev/null
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/CreateShareAccountCommandHandler.java
@@ -0,0 +1,47 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.portfolio.shareaccounts.handler;
+
+import org.apache.fineract.commands.annotation.CommandType;
+import org.apache.fineract.commands.handler.NewCommandSourceHandler;
+import org.apache.fineract.infrastructure.core.api.JsonCommand;
+import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
+import 
org.apache.fineract.portfolio.shareaccounts.service.ShareAccountWritePlatformService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+@CommandType(entity = "SHAREACCOUNT", action = "CREATE")
+public class CreateShareAccountCommandHandler implements 
NewCommandSourceHandler{
+
+
+    private final ShareAccountWritePlatformService 
shareAccountWritePlatformService ;
+    
+    @Autowired
+    public CreateShareAccountCommandHandler(final 
ShareAccountWritePlatformService shareAccountWritePlatformService) {
+        this.shareAccountWritePlatformService = 
shareAccountWritePlatformService ;
+    }
+    @Transactional
+    @Override
+    public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
+        return 
this.shareAccountWritePlatformService.createShareAccount(jsonCommand);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/08c553f9/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/RedeemSharesCommandHandler.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/RedeemSharesCommandHandler.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/RedeemSharesCommandHandler.java
new file mode 100644
index 0000000..09bf0b4
--- /dev/null
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/RedeemSharesCommandHandler.java
@@ -0,0 +1,47 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.portfolio.shareaccounts.handler;
+
+import org.apache.fineract.commands.annotation.CommandType;
+import org.apache.fineract.commands.handler.NewCommandSourceHandler;
+import org.apache.fineract.infrastructure.core.api.JsonCommand;
+import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
+import 
org.apache.fineract.portfolio.shareaccounts.service.ShareAccountWritePlatformService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+@CommandType(entity = "SHAREACCOUNT", action = "REDEEMSHARES")
+public class RedeemSharesCommandHandler implements NewCommandSourceHandler{
+
+
+    private final ShareAccountWritePlatformService 
shareAccountWritePlatformService ;
+    
+    @Autowired
+    public RedeemSharesCommandHandler(final ShareAccountWritePlatformService 
shareAccountWritePlatformService) {
+        this.shareAccountWritePlatformService = 
shareAccountWritePlatformService ;
+    }
+    @Transactional
+    @Override
+    public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
+        return 
this.shareAccountWritePlatformService.redeemShares(jsonCommand.entityId(), 
jsonCommand);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/08c553f9/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/RejectAddtionalSharesCommandHandler.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/RejectAddtionalSharesCommandHandler.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/RejectAddtionalSharesCommandHandler.java
new file mode 100644
index 0000000..dce0f84
--- /dev/null
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/RejectAddtionalSharesCommandHandler.java
@@ -0,0 +1,47 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.portfolio.shareaccounts.handler;
+
+import org.apache.fineract.commands.annotation.CommandType;
+import org.apache.fineract.commands.handler.NewCommandSourceHandler;
+import org.apache.fineract.infrastructure.core.api.JsonCommand;
+import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
+import 
org.apache.fineract.portfolio.shareaccounts.service.ShareAccountWritePlatformService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+@CommandType(entity = "SHAREACCOUNT", action = "REJECTADDITIONALSHARES")
+public class RejectAddtionalSharesCommandHandler implements 
NewCommandSourceHandler{
+
+
+    private final ShareAccountWritePlatformService 
shareAccountWritePlatformService ;
+    
+    @Autowired
+    public RejectAddtionalSharesCommandHandler(final 
ShareAccountWritePlatformService shareAccountWritePlatformService) {
+        this.shareAccountWritePlatformService = 
shareAccountWritePlatformService ;
+    }
+    @Transactional
+    @Override
+    public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
+        return 
this.shareAccountWritePlatformService.rejectAdditionalShares(jsonCommand.entityId(),
 jsonCommand);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/08c553f9/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/RejectShareAccountCommandHandler.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/RejectShareAccountCommandHandler.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/RejectShareAccountCommandHandler.java
new file mode 100644
index 0000000..962eacb
--- /dev/null
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/RejectShareAccountCommandHandler.java
@@ -0,0 +1,47 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.portfolio.shareaccounts.handler;
+
+import org.apache.fineract.commands.annotation.CommandType;
+import org.apache.fineract.commands.handler.NewCommandSourceHandler;
+import org.apache.fineract.infrastructure.core.api.JsonCommand;
+import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
+import 
org.apache.fineract.portfolio.shareaccounts.service.ShareAccountWritePlatformService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+@CommandType(entity = "SHAREACCOUNT", action = "REJECT")
+public class RejectShareAccountCommandHandler implements 
NewCommandSourceHandler{
+
+
+    private final ShareAccountWritePlatformService 
shareAccountWritePlatformService ;
+    
+    @Autowired
+    public RejectShareAccountCommandHandler(final 
ShareAccountWritePlatformService shareAccountWritePlatformService) {
+        this.shareAccountWritePlatformService = 
shareAccountWritePlatformService ;
+    }
+    @Transactional
+    @Override
+    public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
+        return 
this.shareAccountWritePlatformService.rejectShareAccount(jsonCommand.entityId(),
 jsonCommand);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/08c553f9/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/UndoApproveShareAccountCommandHandler.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/UndoApproveShareAccountCommandHandler.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/UndoApproveShareAccountCommandHandler.java
new file mode 100644
index 0000000..bbfe92f
--- /dev/null
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/UndoApproveShareAccountCommandHandler.java
@@ -0,0 +1,47 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.portfolio.shareaccounts.handler;
+
+import org.apache.fineract.commands.annotation.CommandType;
+import org.apache.fineract.commands.handler.NewCommandSourceHandler;
+import org.apache.fineract.infrastructure.core.api.JsonCommand;
+import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
+import 
org.apache.fineract.portfolio.shareaccounts.service.ShareAccountWritePlatformService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+@CommandType(entity = "SHAREACCOUNT", action = "UNDOAPPROVAL")
+public class UndoApproveShareAccountCommandHandler implements 
NewCommandSourceHandler{
+
+
+    private final ShareAccountWritePlatformService 
shareAccountWritePlatformService ;
+    
+    @Autowired
+    public UndoApproveShareAccountCommandHandler(final 
ShareAccountWritePlatformService shareAccountWritePlatformService) {
+        this.shareAccountWritePlatformService = 
shareAccountWritePlatformService ;
+    }
+    @Transactional
+    @Override
+    public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
+        return 
this.shareAccountWritePlatformService.undoApproveShareAccount(jsonCommand.entityId(),
 jsonCommand);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/08c553f9/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/UpdateShareAccountCommandHandler.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/UpdateShareAccountCommandHandler.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/UpdateShareAccountCommandHandler.java
new file mode 100644
index 0000000..d71ab12
--- /dev/null
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/handler/UpdateShareAccountCommandHandler.java
@@ -0,0 +1,47 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.fineract.portfolio.shareaccounts.handler;
+
+import org.apache.fineract.commands.annotation.CommandType;
+import org.apache.fineract.commands.handler.NewCommandSourceHandler;
+import org.apache.fineract.infrastructure.core.api.JsonCommand;
+import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
+import 
org.apache.fineract.portfolio.shareaccounts.service.ShareAccountWritePlatformService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+@CommandType(entity = "SHAREACCOUNT", action = "UPDATE")
+public class UpdateShareAccountCommandHandler implements 
NewCommandSourceHandler {
+
+    private final ShareAccountWritePlatformService 
shareAccountWritePlatformService ;
+    
+    @Autowired
+    public UpdateShareAccountCommandHandler(final 
ShareAccountWritePlatformService shareAccountWritePlatformService) {
+        this.shareAccountWritePlatformService = 
shareAccountWritePlatformService ;
+    }
+
+    @Transactional
+    @Override
+    public CommandProcessingResult processCommand(JsonCommand jsonCommand) {
+        return 
this.shareAccountWritePlatformService.updateShareAccount(jsonCommand.entityId(),
 jsonCommand);
+    }
+
+}


Reply via email to