ShowCardInformation.cs 6.21 KB
using MoyaAdminLib;
using MoyaAdminUI.MoyaAPI;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Script.Serialization;
using System.Windows.Forms;

namespace MoyaAdminUI
{
    public partial class ShowCardInformation : Form
    {
        public static string CARD_PREFIX = "277";
        public static string TICKET_PREFIX = "279";
        public static string CARD_PLACE = "cardplace";

        public ShowCardInformation()
        {
            InitializeComponent();
        }

        private void barcodeTimer_Tick(object sender, EventArgs e)
        {
            barcodeTimer.Stop();
            int id = 0;
            string ret = "";
            RestClient client = new RestClient(Properties.Settings.Default.ApiURL);
            if (parseCardId(barcodeTextBox.Text, out id))
                ret = client.MakeRequest("card/Get/" + id);
            else if (parseEventUserId(barcodeTextBox.Text, out id))
                ret = client.MakeRequest("user/card/" + id);
            var ser = new JavaScriptSerializer();
            Card card = ser.Deserialize<Card>(ret);
            if (card != null)
            {
                nameTextBox.Text = card.wholeName;
                nickTextBox.Text = card.username;
                cardTemplateTextBox.Text = card.cardTemplate;
                cardStateTextBox.Text = card.state;

                pictureBox1.ImageLocation = RestClient.GetRequestURL(Properties.Settings.Default.ApiURL, "card/GetImage/" + card.cardId);

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

                        if (bookNumber > 0)
                            bookNumericUpDown.Value = bookNumber;
                        if (pageNumber > 0)
                            pageNumericUpDown.Value = pageNumber;
                        if (slotNumber > 0)
                            slotNumericUpDown.Value = slotNumber;
                    }
                }
            }
            barcodeTextBox.Text = "";
        }

        public 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);
                            }
                        }
                    }
                }
            }
        }

        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 bool parseCardId(string data, out int id)
        {
            id = 0;
            if (data.Length == 13 && data.Substring(0, 3) == CARD_PREFIX)
            {
                int.TryParse(data.Substring(3, 9), out id);
                if (id > 0)
                    return true;
            }
            

            return false;
        }

        private bool parseEventUserId(string data, out int id)
        {
            id = 0;
            if (data.Length == 13 && data.Substring(0, 3) == TICKET_PREFIX)
            {
                int.TryParse(data.Substring(3, 9), out id);
                if (id > 0)
                    return true;
            }
            return false;
        }

        private void barcodeTextBox_TextChanged(object sender, EventArgs e)
        {
            if (barcodeTextBox.Text != "")
                barcodeTimer.Start();
        }

       
    }
}