public async Task <IActionResult> Activate(ActivateActionModel model)
        {
            // var loginCookie = await _tracfone.Login();
            // var estOrder = await _tracfone.EstimateOrder(loginCookie);
            // var submitOrder = await _tracfone.SubmitOrder(loginCookie);
            var result = await _tracfone.Activate(model);

            return(Json(result));
        }
        public IActionResult Example(string zipCode)
        {
            var model = new ActivateActionModel
            {
                Zip = zipCode
            };

            return(View(model));
        }
        public async Task <IActionResult> ExecuteBulk()
        {
            var repo     = new Repository(_connectionString);
            var bulkData = repo.GetAllBulkData();

            var results = new List <dynamic>();

            foreach (BulkData data in bulkData)
            {
                if (!data.Done)
                {
                    switch (data.Action)
                    {
                    case BulkAction.AddDevice:
                        var addDeviceModel = new AddDeviceActionModel
                        {
                            Serial = data.Serial,
                            Sim    = data.Sim
                        };
                        string addDeviceResults = "";

                        //BYOP Eligibility
                        dynamic byopEligibilityResult = null;
                        for (int i = 0; i < 3; i++)
                        {
                            byopEligibilityResult = await _tracfone.CheckBYOPEligibility(addDeviceModel.Serial);
                        }
                        string byopEligibilityStatus = byopEligibilityResult["status"]["code"].ToString();

                        if (byopEligibilityStatus != "0" && byopEligibilityStatus != "10008" && byopEligibilityStatus != "11023")
                        {
                            byopEligibilityResult["request"] = "BYOP Eligibility Failed";
                            addDeviceResults += JsonConvert.SerializeObject(byopEligibilityResult);
                            data.response     = addDeviceResults;
                            results.Add(byopEligibilityResult);
                            break;
                        }

                        // Skip BYOP Registration if already added
                        if (byopEligibilityStatus == "10008" || byopEligibilityStatus == "11023")
                        {
                            //Add Device
                            var addDeviceResult2 = await _tracfone.AddDevice(addDeviceModel.Serial);

                            addDeviceResults += JsonConvert.SerializeObject(addDeviceResult2);
                            data.response     = addDeviceResults;
                            results.Add(addDeviceResult2);
                            break;
                        }

                        //BYOP Registration
                        dynamic byopRegistrationResult = await _tracfone.BYOPRegistration(addDeviceModel);

                        string byopRegistrationStatus = byopRegistrationResult["status"]["code"].ToString();

                        if (byopRegistrationStatus != "0")
                        {
                            byopRegistrationResult["request"] = "BYOP Registration Failed";
                            addDeviceResults += JsonConvert.SerializeObject(byopRegistrationResult);
                            data.response     = byopEligibilityResult;
                            results.Add(byopRegistrationResult);
                            break;
                        }

                        //Add Device
                        var addDeviceResult = await _tracfone.AddDevice(addDeviceModel.Serial);

                        addDeviceResults += JsonConvert.SerializeObject(addDeviceResult);
                        data.response     = addDeviceResults;

                        results.Add(addDeviceResults);

                        break;

                    case BulkAction.DeleteDevice:
                        var deleteSerial = data.Serial;

                        var deleteResp = await _tracfone.DeleteDevice(deleteSerial);

                        data.response = JsonConvert.SerializeObject(deleteResp);
                        results.Add(deleteResp);
                        break;

                    case BulkAction.Activate:
                        var activateModel = new ActivateActionModel
                        {
                            Serial = data.Serial,
                            Sim    = data.Sim,
                            Zip    = data.Zip
                        };

                        var activateResp = await _tracfone.Activate(activateModel);

                        data.response = JsonConvert.SerializeObject(activateResp);
                        results.Add(activateResp);
                        break;

                    case BulkAction.InternalPort:
                        var internelPortModel = new PortActionModel
                        {
                            Serial = data.Serial,
                            Sim    = data.Sim,
                            Zip    = data.Zip,
                            CurrentAccountNumber   = data.CurrentAccountNumber,
                            CurrentMIN             = data.CurrentMIN,
                            CurrentServiceProvider = data.CurrentServiceProvider,
                            CurrentVKey            = data.CurrentVKey
                        };

                        var iportResp = await _tracfone.InternalPort(internelPortModel);

                        data.response = JsonConvert.SerializeObject(iportResp);
                        results.Add(iportResp);
                        break;

                    case BulkAction.ExternalPort:
                        var externelPortModel = new PortActionModel
                        {
                            Serial = data.Serial,
                            Sim    = data.Sim,
                            Zip    = data.Zip,
                            CurrentAccountNumber   = data.CurrentAccountNumber,
                            CurrentMIN             = data.CurrentMIN,
                            CurrentServiceProvider = data.CurrentServiceProvider,
                        };

                        var eportResp = await _tracfone.ExternalPort(externelPortModel);

                        data.response = JsonConvert.SerializeObject(eportResp);
                        results.Add(eportResp);
                        break;

                    case BulkAction.ChangeSIM:
                        var changeSIMModel = new ActivateActionModel
                        {
                            Serial = data.Serial,
                            Sim    = data.Sim,
                            Zip    = data.Zip
                        };

                        var changeSIMResp = await _tracfone.ChangeSIM(changeSIMModel);

                        data.response = JsonConvert.SerializeObject(changeSIMResp);
                        results.Add(changeSIMResp);
                        break;

                    case BulkAction.DeactivateAndRetaineDays:
                        var deactivateAndRetaineDaysReponse = await _tracfone.DeactivateAndRetaineDays(data.Serial);

                        data.response = JsonConvert.SerializeObject(deactivateAndRetaineDaysReponse);
                        results.Add(deactivateAndRetaineDaysReponse);
                        break;

                    case BulkAction.DeactivatePastDue:
                        var deactivatePastDueResponse = await _tracfone.DeactivatePastDue(data.Serial);

                        data.response = JsonConvert.SerializeObject(deactivatePastDueResponse);
                        results.Add(deactivatePastDueResponse);
                        break;
                    }
                }
            }
            repo.WriteAllResponse(bulkData);
            return(Json(results));
        }
        public async Task <IActionResult> ChangeSIM(ActivateActionModel model)
        {
            var result = await _tracfone.ChangeSIM(model);

            return(Json(result["status"]["message"].ToString()));
        }
        public async Task <IActionResult> ExecuteBulk()
        {
            var results  = new List <IActionResult>();
            var repo     = new Repository(_connectionString);
            var bulkData = repo.GetAllBulkData();

            foreach (BulkData data in bulkData)
            {
                switch (data.Action)
                {
                case BulkAction.AddDevice:
                    var addDeviceModel = new AddDeviceActionModel
                    {
                        Serial = data.Serial,
                        Sim    = data.Sim
                    };
                    results.Add(await AddDevice(addDeviceModel));
                    break;

                case BulkAction.DeleteDevice:
                    var deleteModel = new DeleteActionModel
                    {
                        Serial = data.Serial
                    };
                    results.Add(await DeleteDevice(deleteModel));
                    break;

                case BulkAction.Activate:
                    var activateModel = new ActivateActionModel
                    {
                        Serial = data.Serial,
                        Sim    = data.Sim,
                        Zip    = data.Zip
                    };
                    results.Add(await Activate(activateModel));
                    break;

                case BulkAction.InternalPort:
                    var internelPortModel = new PortActionModel
                    {
                        Serial = data.Serial,
                        Sim    = data.Sim,
                        Zip    = data.Zip,
                        CurrentAccountNumber   = data.CurrentAccountNumber,
                        CurrentMIN             = data.CurrentMIN,
                        CurrentServiceProvider = data.CurrentServiceProvider,
                        CurrentVKey            = data.CurrentVKey
                    };
                    results.Add(await InternalPort(internelPortModel));
                    break;

                case BulkAction.ExternalPort:
                    var externelPortModel = new PortActionModel
                    {
                        Serial = data.Serial,
                        Sim    = data.Sim,
                        Zip    = data.Zip,
                        CurrentAccountNumber   = data.CurrentAccountNumber,
                        CurrentMIN             = data.CurrentMIN,
                        CurrentServiceProvider = data.CurrentServiceProvider,
                    };
                    results.Add(await ExternalPort(externelPortModel));
                    break;
                }
            }

            return(Json(results));
        }
        public async Task <IActionResult> Activate(ActivateActionModel model)
        {
            Tracfone tracfone = new Tracfone();
            var      url      = $"api/order-mgmt/v1/serviceorder?client_id={_clientID}";
            var      auth     = await tracfone.GetOrderMgmtAuthorization(_accessToken);

            var activateData = new ServiceData
            {
                OrderDate      = "2016-04-16T16:42:23-04:00",
                RelatedParties = new List <RelatedParty>
                {
                    new RelatedParty
                    {
                        RoleType = "partner",
                        Party    = new Party
                        {
                            PartyExtension = new List <Extension>
                            {
                                new Extension
                                {
                                    Name  = "partyTransactionID",
                                    Value = "84306270-c4cd-4142-b41a-311b63b70074"
                                },
                                new Extension
                                {
                                    Name  = "sourceSystem",
                                    Value = "EBP"
                                }
                            },
                            PartyID         = "vendor name",
                            LanguageAbility = "ENG",
                        }
                    },
                    new RelatedParty
                    {
                        RoleType = "customer",
                        Party    = new Party
                        {
                            PartyExtension = new List <Extension>
                            {
                                new Extension
                                {
                                    Name  = "accountEmail",
                                    Value = _username
                                }
                            },
                            Individual = new Individual
                            {
                                ID = "681177314"
                            }
                        }
                    }
                },
                ExternalID = "123",
                OrderItems = new List <OrderItem>
                {
                    new OrderItem
                    {
                        Product = new Product
                        {
                            SubCategory          = "BRANDED",
                            ProductCategory      = "HANDSET",
                            ProductSpecification = new Specification
                            {
                                Brand = "CLEARWAY"
                            },
                            RelatedServices = new List <RelatedService>
                            {
                                new RelatedService
                                {
                                    ID       = "",
                                    Category = "SERVICE_PLAN"
                                }
                            },
                            ProductSerialNumber = model.Serial,
                            SupportingResources = new List <SupportingResource>
                            {
                                new SupportingResource
                                {
                                    SerialNumber = model.Sim,
                                    ResourceType = "SIM_CARD"
                                }
                            }
                        },
                        ID       = "1",
                        Location = new Location
                        {
                            PostalAddress = new PostalAddress
                            {
                                Zipcode = model.Zip
                            }
                        },
                        Action = "ACTIVATION"
                    }
                }
            };
            var result = await tracfone.PostAPIResponse(url, $"{auth.token_type} {auth.access_token}", activateData);

            return(Json(result));
        }