Card.cs 4.56 KB
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Script.Serialization;

namespace MoyaAdminLib
{
    public class Card
    {
        public static string CARD_STATE_PRINTED = "PRINTED";
        public static string CARD_BARCODE_PREFIX = "277";
        public static string CARD_PLACE = "cardplace";

        //{"cardId":3990,"state":"PENDING_VALIDATION","cardTemplate":"pelaaja","username":"Miketzu","wholeName":"Mirco Renko"}
        public int cardId;
        public string state;
        public string cardTemplate;
        public string username;
        public string wholeName;
        

        public String Label()
        {
            return cardId + ", " + username + ", " + wholeName;
        }

        public static bool ParseCardId(string data, out int id)
        {
            id = 0;
            if (data.Length == 13 && data.Substring(0, 3) == CARD_BARCODE_PREFIX)
            {
                int.TryParse(data.Substring(3, 9), out id);
                if (id > 0)
                    return true;
            }

            return false;
        }

        public string GetCardPlace(){

            if (this.state == Card.CARD_STATE_PRINTED)
            {
                string json = "";
                RestClient client = new RestClient(RestClient.ApiURL);
                try
                {
                    json = client.MakeRequest("meta/v1/printedcard/" + this.cardId + "/card-filing");
                }
                catch (ApplicationException ex)
                {
                    if (!ex.Message.Contains("HTTP NoContent"))
                        return "";
                }
                if (json != null && json != "")
                {
                    MetaData data = getValue(json);
                    int bookNumber = 0;
                    int pageNumber = 0;
                    int slotNumber = 0;
                    getCardPlace(data, out bookNumber, out pageNumber, out slotNumber);
                    return bookNumber + "." + pageNumber + "." + slotNumber;
                }
            }
            return "";
        
        }
        private MetaData getValue(string ret)
        {
            MetaData data = null;

            if (ret != null && ret != "")
            {
                ret = ret.Trim();
                if (ret.StartsWith("{") && ret.EndsWith("}"))
                {
                    ret = ret.Replace("{", "");
                    ret = ret.Replace("}", "");
                    if (ret.Contains(":"))
                    {
                        data = new MetaData();
                        string[] fields = ret.Split(new string[] { ":" }, StringSplitOptions.RemoveEmptyEntries);
                        if (fields.Length == 2)
                        {
                            if (fields[0].StartsWith("\""))
                                fields[0] = fields[0].Substring(1, fields[0].Length - 1);
                            if (fields[0].EndsWith("\""))
                                fields[0] = fields[0].Substring(0, fields[0].Length - 1);
                            data.key = fields[0];
                            if (fields[1].StartsWith("\""))
                                fields[1] = fields[1].Substring(1, fields[1].Length - 1);
                            if (fields[1].EndsWith("\""))
                                fields[1] = fields[1].Substring(0, fields[1].Length - 1);
                            data.value = fields[1];
                        }
                    }
                }
            }

            return data;
        }

        private void getCardPlace(MetaData data, out int bookNumber, out int pageNumber, out int slotNumber)
        {
            bookNumber = 0;
            pageNumber = 0;
            slotNumber = 0;
            if (data != null)
            {
                if (data.key == CARD_PLACE)
                {
                    if (data.value != null && data.value != "")
                    {
                        string[] fields = data.value.Split(new string[] { "." }, StringSplitOptions.None);
                        if (fields.Length > 2)
                        {
                            if (fields.Length == 3)
                            {
                                int.TryParse(fields[0], out bookNumber);
                                int.TryParse(fields[1], out pageNumber);
                                int.TryParse(fields[2], out slotNumber);
                            }
                        }
                    }
                }
            }
        }


    }
}