public bool ProcessSalary(string companyCode, string month) { using (var con = ConnectionGetway.GetConnection()) { con.Open(); using (var tran = con.BeginTransaction()) { try { var topLevelSalesman = _salesman.GetAssociates(companyCode, companyCode); _salary.CreateNewSalaryAcc(con, tran, companyCode, month); ProcessOrdinalCommission(con, tran, companyCode); ProcessSalesBoundGbCommission(con, tran, topLevelSalesman); tran.Commit(); return(true); } catch (Exception err) { tran.Rollback(); throw (err); } } } }
public bool IsEligibleForOrdinalCommission(SalesmanModel salesman) { double personalSale = _salesman.GetSalesAmount(salesman.CompanyCode, code: salesman.Code); if (!IsEligible(personalSale)) { return(false); } double associatesSale = _salesman.GetAssociatesSalesAmount(salesman.CompanyCode, referenceCode: salesman.ReferenceCode); switch (salesman.Designation) { case Designation.C: { return(associatesSale >= 16000); } case Designation.D: { if (associatesSale >= 6000) { var associates = _salesman.GetAssociates(salesman.CompanyCode, salesman.Code, (int)Designation.C); bool isEligible = false; foreach (var associate in associates) { if (isEligible) { return(true); } isEligible = IsEligibleForOrdinalCommission(associate); } } return(false); } case Designation.E: { if ((personalSale + associatesSale) >= 70000) { var associatesB = _salesman.GetAssociates(salesman.CompanyCode, salesman.Code, (int)Designation.B); int eligibleB = 0; foreach (var associate in associatesB) { if (eligibleB == 3) { break; } if (IsEligible(_salesman.GetSalesAmount(associate.CompanyCode, code: associate.Code))) { eligibleB++; } } if (eligibleB == 3) { var associatesC = _salesman.GetAssociates(salesman.CompanyCode, salesman.Code, (int)Designation.C); int eligibleC = 0; foreach (var associate in associatesC) { if (eligibleC == 3) { break; } if (IsEligibleForOrdinalCommission(associate)) { eligibleC++; } } return(eligibleC == 3); } } return(false); } case Designation.F: { #region Checking B Eligiblity var associatesB = _salesman.GetAssociates(salesman.CompanyCode, salesman.Code, (int)Designation.B); int eligibleB = 0; foreach (var associate in associatesB) { if (eligibleB == 2) { break; } if (IsEligible(_salesman.GetSalesAmount(salesman.CompanyCode, code: associate.Code))) { eligibleB++; } } if (eligibleB < 2) { return(false); } #endregion #region #region Checking C Eligiblity var associatesC = _salesman.GetAssociates(salesman.CompanyCode, salesman.Code, (int)Designation.C); bool eligibleC = false; foreach (var associate in associatesC) { if (eligibleC) { break; } if (IsEligibleForOrdinalCommission(associate)) { eligibleC = true; } } if (!eligibleC) { return(false); } #endregion #region #region Checking E Eligiblity var associatesE = _salesman.GetAssociates(salesman.CompanyCode, salesman.Code, (int)Designation.E); int eligibleE = 0; foreach (var associate in associatesE) { if (eligibleE == 2) { break; } if (IsEligibleForOrdinalCommission(associate)) { eligibleE++; } } return(eligibleE >= 2); #endregion } case Designation.G: { var associatesE = _salesman.GetAssociates(salesman.CompanyCode, salesman.Code, (int)Designation.E); int eligibleE = 0; foreach (var associate in associatesE) { if (eligibleE == 4) { break; } if (IsEligibleForOrdinalCommission(associate)) { eligibleE++; } } return(eligibleE >= 4); } case Designation.H: { var associatesE = _salesman.GetAssociates(salesman.CompanyCode, salesman.Code, (int)Designation.E); int eligibleE = 0; foreach (var associate in associatesE) { if (eligibleE == 6) { break; } if (IsEligibleForOrdinalCommission(associate)) { eligibleE++; } } return(eligibleE >= 6); } case Designation.I: { var associatesH = _salesman.GetAssociates(salesman.CompanyCode, salesman.Code, (int)Designation.H); int eligibleH = 0; foreach (var associate in associatesH) { if (eligibleH == 6) { break; } if (IsEligibleForOrdinalCommission(associate)) { eligibleH++; } } return(eligibleH >= 6); } case Designation.J: { var associatesI = _salesman.GetAssociates(salesman.CompanyCode, salesman.Code, (int)Designation.I); int eligibleI = 0; foreach (var associate in associatesI) { if (eligibleI == 3) { break; } if (IsEligibleForOrdinalCommission(associate)) { eligibleI++; } } return(eligibleI >= 3); } case Designation.K: { var associatesJ = _salesman.GetAssociates(salesman.CompanyCode, salesman.Code, (int)Designation.J); int eligibleJ = 0; foreach (var associate in associatesJ) { if (eligibleJ == 2) { break; } if (IsEligibleForOrdinalCommission(associate)) { eligibleJ++; } } return(eligibleJ >= 2); } default: return(false); } }