public HttpResponseMessage Service(HttpRequestMessage req, DL_Service service)
        {
            //Logger.WriteLog(LogLevelL4N.FATAL, "Recharge");
            User user = new User()
            {
                Password = service.Key, UserId = service.UserId
            };

            Validation.UserCheck(user);
            if (Validation._IsSuccess)
            {
                if (service != null && !string.IsNullOrEmpty(service.Amount.ToString()) && Convert.ToDouble(service.Amount) > 0 && !string.IsNullOrEmpty(service.Number) && service.OperatorId > 0 &&
                    !string.IsNullOrEmpty(service.Source) && !string.IsNullOrEmpty(service.UserId) && !string.IsNullOrEmpty(service.Key))
                {
                    try
                    {
                        //Modify: Ranjeet | 12-Dec|| Moved if condition above try/catch
                        //  {
                        DL_ServiceReturn serviceReturn = dash.Service(service);//call to process the transaction.
                        if (dash._IsSuccess)
                        {
                            return(req.CreateResponse <DL_ServiceReturn>(HttpStatusCode.OK, serviceReturn));
                        }
                        else
                        {
                            return(req.CreateErrorResponse(HttpStatusCode.InternalServerError, "ServerError"));
                        }
                        //}
                        //Logger.WriteLog(LogLevelL4N.FATAL, "Bad Request");
                        //return req.CreateResponse(HttpStatusCode.BadRequest, "Bad Request");
                    }
                    catch (Exception ex)
                    {
                        Logger.WriteLog(LogLevelL4N.ERROR, "Inside the Service api | Error : " + ex.Message);
                    }
                }
                else
                {
                    Logger.WriteLog(LogLevelL4N.FATAL, "Bad Request");
                    return(req.CreateResponse(HttpStatusCode.BadRequest, "Bad Request"));
                }
            }

            Logger.WriteLog(LogLevelL4N.FATAL, "Unauthorized Request");
            return(req.CreateResponse(HttpStatusCode.Unauthorized, "Unauthorized"));
        }
        public DL_ServiceReturn Service(DL_Service service)
        {
            try
            {
                this._IsSuccess    = true;
                this.serviceReturn = new DL_ServiceReturn();
                ProcessReqReturn rechargeStatus = new ProcessReqReturn();

                #region Check Account available balance and servie status.

                this.SpName = DL_StoreProcedure.SP_DHS_API_AvailableBalanceNServieStatus; //Sp Name || Get the Available balance and Service status.
                SqlParameter[] p = new SqlParameter[2];
                p[0] = new SqlParameter("@UserId", service.UserId);
                p[1] = new SqlParameter("@OpId", service.OperatorId);
                ds   = db.GetDataSet(this.SpName, p);
                UserInfo userInfo = null;

                if (ds != null && ds.Tables.Count > 0)
                {
                    DataRow drc = ds.Tables[0].Rows[0];

                    userInfo = new UserInfo()
                    {
                        AvailBal      = Convert.ToDouble(drc["AvailableBalance"] != null ? drc["AvailableBalance"] : 0),
                        Margin        = Convert.ToDouble(drc["Margin"]),
                        ServiceStatus = Convert.ToBoolean(drc["ServiceStatus"]),
                        UType         = Convert.ToInt32(drc["UType"]),
                        IsFixedCharge = Convert.ToBoolean(drc["IsFixedCharge"])
                    };
                }

                #endregion

                #region Call Cyber Plate APIs

                if (userInfo.AvailBal >= service.Amount && userInfo.ServiceStatus)
                {
                    //if (!string.IsNullOrEmpty(service.InsuranceDob) && (Convert.ToInt32(service.OperatorId) == 243) || Convert.ToInt32(service.OperatorId) == 242)//Insurance
                    //account = service.InsuranceDob;
                    rechargeStatus = new RechargeProcess().ProcessRequest(service.OperatorId, service.Number, service.Amount, service.Account);

                    //double profit = 0;
                    string transactionId = string.IsNullOrEmpty(rechargeStatus.TransactionId) ? "-1" : rechargeStatus.TransactionId;
                    string status        = rechargeStatus.StatusCode == 1 ? "1" : "0"; //check once
                    int    apiId         = (int)APIName.Cyber_Plate;                   //"CyberPate";
                    string billRecieptId = string.Empty;

                    //Profit ||
                    //check || Postpaid,electricity, gas bill, insurense and broadband
                    if (rechargeStatus.StatusCode == 1)
                    {
                        //if (userInfo.IsFixedCharge)
                        //{
                        //    profit = 0; //No Profit
                        //    //service.Amount = service.Amount+ userInfo.Margin;//Fixed charges from Crebit
                        //}
                        //else
                        //{
                        //    profit = ((service.Amount * userInfo.Margin) / 100); //Percentage margin
                        //}
                    }
                    else //Fail
                    {
                        //profit = 0;
                        service.Amount = 0;
                    }

                    #region SQLParameters

                    this.SpName = DL_StoreProcedure.SP_DHS_API_Service; //Sp Name
                    SqlParameter[] param = new SqlParameter[10];
                    param[0] = new SqlParameter("@UserId", service.UserId);
                    param[1] = new SqlParameter("@Number", service.Number);
                    param[2] = new SqlParameter("@Amount", service.Amount);
                    //param[3] = new SqlParameter("@Profit", profit);
                    param[3] = new SqlParameter("@ApiTransactionId", transactionId); //transId from CyberPlate
                    param[4] = new SqlParameter("@OperaterId", service.OperatorId);
                    param[5] = new SqlParameter("@Status", status);                  //'1-pass' || '0-fail'
                    param[6] = new SqlParameter("@Source", service.Source);          //'website/androidapp'
                    param[7] = new SqlParameter("@ApiId", apiId);                    //CyberPlate
                    param[8] = new SqlParameter("@Date", indianTime);
                    param[9] = new SqlParameter("@Session", rechargeStatus.SessionId);

                    #endregion

                    ds = db.GetDataSet(this.SpName, param);
                    if (ds != null && ds.Tables.Count > 0)
                    {
                        DataRow dr = ds.Tables[0].Rows[0];
                        serviceReturn.TransId          = dr["TransId"].ToString();
                        serviceReturn.AvailableBalance = dr["AvBalance"].ToString();
                        string reMobile = dr["Mobile"].ToString();
                        //AvBalance
                        serviceReturn.StatusCode = rechargeStatus.StatusCode; //success
                        #region commented || SMS || Not required || 05-Aug-14
                        if (serviceReturn.StatusCode == 1)
                        {
                            //send message to retailer
                            //Dear USER ##Field##. Recharge successful on ##Field## for Rs. ##Field##.Your Available Balance is ##Field##.CREBIT Customer Experience Team.
                            //string message = "Dear USER " + service.UserId + ". Recharge successful on " + service.Number + " for Rs.  " + service.Amount + ".Your Available Balance is " + serviceReturn.AvailableBalance + ".CREBIT Customer Experience Team.";
                            //string message = "Dear User" + service.UserId + ". Recharge successful on " + service.Number + " for Rs. " + service.Amount + ".Your Available Balance is " + serviceReturn.AvailableBalance + " .Crebit Customer Experience Team.";

                            //send meesage to customer > amount => 250
                            string message = "Dear User, Recharge successful on " + service.Number + " for Rs." + service.Amount + " .CREBIT Customer Experience Team.";

                            if (service.Amount >= 250)
                            {
                                Task t = new Task(() => BL_SMS.SendSMS(service.Number, message));
                                t.Start();
                            }
                            //send message to customer
                            //if (service.TransactionType == "1" || service.TransactionType == "2")
                            {
                                //  message = "Dear Customer, Your account has been successfully recharged for Rs. " + service.Amount + " .Crebit Customer Experience Team.";
                                //BL_SMS.SendSMS(service.Number, message);
                            }
                        }
                        #endregion
                    }
                    serviceReturn.Message = rechargeStatus.Message;
                }
                #endregion

                #region If Either not enough balance or Servie if Off
                else
                {
                    //serviceReturn.IsSuccess = false;
                    serviceReturn.TransId = null;

                    if (userInfo.AvailBal < service.Amount)
                    {
                        //serviceReturn.Message = "Not enough Balance in account";
                        serviceReturn.StatusCode = 2;
                    }
                    else
                    {
                        //serviceReturn.Message = "Serice is Off";
                        serviceReturn.StatusCode = 3;
                    }
                }
                #endregion
            }
            catch (Exception ex)
            {
                Logger.WriteLog(LogLevelL4N.ERROR, "@Service | Exception : " + ex.Message);
                serviceReturn.StatusCode = 0; //error
                serviceReturn.TransId    = null;
                _IsSuccess = false;
            }

            return(serviceReturn);
        }