E-Fatura QR Code Ekleme

E-Fatura xlst template dosyamıza qr code ekleyebiliriz. Bunun için bir web api yada base64 e çevrilmiş bir qrcode resmi kullanmamız gerekir

Gösteceğim örnek dinamik gelen bir qrcode verisini web api kullanarak qrcode u base64 olarak alıp e-fatura dosyasında göstereceğiz .

	<img>
		  <xsl:attribute name="src"> https://api.qrserver.com/v1/create-qr-code/?data=https://www.ahmetaydinlik.com&amp;size=150x150</xsl:attribute>
		  <xsl:attribute name="height">150</xsl:attribute>
		  <xsl:attribute name="width">150</xsl:attribute>
	</img>

xsl:attribute komutu ile image nesnemin özelliklerini atıyorum.

eğer burada dinamik bir veri dönüştürmek isteseydik src verimizin içeriğini değiştirirek api serverdaki data parametresine dinamik verimizi eklersek istediğimiz veriyi bize 150px boyutunda bir qrcode oluşturur

ekran görüntüsü

aşağıdaki komut ile örneğe bakabilirsiniz


<img>
     <xsl:attribute name="src"> https://api.qrserver.com/v1/create-qr-code/?data=<xsl:for-each select="//n1:DespatchAdvice/cbc:Note[2]"><xsl:value-of select="."/></xsl:for-each>&amp;size=150x150</xsl:attribute>
	 <xsl:attribute name="height">150</xsl:attribute>
	 <xsl:attribute name="width">150</xsl:attribute>
</img>


Burada e-fatura xml dosyasında gelen not 2 deki veriyi qrcode a yerleştirdik

E-Fatura Not Alanından Veri Alma

E-Fatura xslt template dosyasında not alanlarına yazılmış olan notlardan belirli karakterler arasında veri almak için aşağıdaki komutu kullanabiliriz

     <xsl:for-each select="//n1:DespatchAdvice/cbc:Note[3]">									 
	      <xsl:value-of select="substring-before(substring(.,0,21),'#')"/>	
	 </xsl:for-each>


Yukarıda yazılı olan substring-before komutu ile not alanında gelen kelimin 0 ıncı karakterinden başyalıp 21 inci karaktere kadar yazmasını istedik

Asp SQL Injection Temizleme function
Function Temizle(strVeri)
	If strVeri = "" Then Exit Function

	strVeri = Replace(strVeri, "<", "&amp;lt;")
	strVeri = Replace(strVeri, ">", "&amp;gt;")
	strVeri = Replace(strVeri, "[", "&amp;#091;")
	strVeri = Replace(strVeri, "]", "&amp;#093;")
	strVeri = Replace(strVeri, """", "", 1, -1, 1)
	strVeri = Replace(strVeri, "=", "&amp;#061;", 1, -1, 1)
	strVeri = Replace(strVeri, "'", "''", 1, -1, 1)
	strVeri = Replace(strVeri, "Select", "sel&amp;#101;ct", 1, -1, 1)
	strVeri = Replace(strVeri, "join", "jo&amp;#105;n", 1, -1, 1)
	strVeri = Replace(strVeri, "union", "un&amp;#105;On", 1, -1, 1)
	strVeri = Replace(strVeri, "where", "wh&amp;#101;re", 1, -1, 1)
	strVeri = Replace(strVeri, "insert", "ins&amp;#101;rt", 1, -1, 1)
	strVeri = Replace(strVeri, "Delete", "del&amp;#101;te", 1, -1, 1)
	strVeri = Replace(strVeri, "Update", "up&amp;#100;ate", 1, -1, 1)
	strVeri = Replace(strVeri, "Like", "lik&amp;#101;", 1, -1, 1)
	strVeri = Replace(strVeri, "drop", "dro&amp;#112;", 1, -1, 1)
	strVeri = Replace(strVeri, "create", "cr&amp;#101;ate", 1, -1, 1)
	strVeri = Replace(strVeri, "modify", "Mod&amp;#105;fy", 1, -1, 1)
	strVeri = Replace(strVeri, "rename", "ren&amp;#097;Me", 1, -1, 1)
	strVeri = Replace(strVeri, "alter", "alt&amp;#101;r", 1, -1, 1)
	strVeri = Replace(strVeri, "cast", "ca&amp;#115;t", 1, -1, 1)
	
	Temizle = strVeri

End Function
Asp Sql Server uygun tarih çevirme function
Function TarihDondur(tarih)
			tarihParcalar = Split(tarih, ".")
			Dim gun
			gun = FormatNumber(tarihParcalar(0), 0)
			If Len(gun) = 1 Then
				gun = "0" & gun
			End If
			Dim ay
			ay = FormatNumber(tarihParcalar(1), 0)
			If Len(ay) = 1 Then
				ay = "0" & ay
			End If
			Dim yil
			yil = tarihParcalar(2)
			TarihDondur =  yil& "-" & ay & "-" & gun
	 	
	end function 

Kullanımı

  <%= TarihDondur("29.10.1986")%>
  Ekran Çıktısı : 1986-10-29 

Asp Türkçe karakter temizleme scripti
 Function Turkce(strveri)
	If strVeri = "" Then Exit Function
		strVeri = Replace(strVeri, "ç", "&#231;")
		strVeri = Replace(strVeri, "ı", "&#305;")
		strVeri = Replace(strVeri, "ğ", "&#287;")
		strVeri = Replace(strVeri, "ö", "&#246;")
		strVeri = Replace(strVeri, "ş", "&#351;")
		strVeri = Replace(strVeri, "ü", "&#252;")
		strVeri = Replace(strVeri, "Ç", "&#199;")
		strVeri = Replace(strVeri, "İ", "&#304;")
		strVeri = Replace(strVeri, "Ğ", "&#286;")
 		strVeri = Replace(strVeri, "Ö", "&#214;")
		strVeri = Replace(strVeri, "Ş", "&#350;")
		strVeri = Replace(strVeri, "Ü", "&#220;")
		turkce = strveri
 End Function 

Karakter Kodları Listesi

Aşağıdaki tabloda HTML kodları içinde kullanılabilecek ISO Latin-1 karakter seti dahilindeki isimlendirilmiş karakter girişleri gösterilmektedir. Listede sık kullanılan bazı önemli işaretlerin/karakterlerin açıklamaları kalın olarak belirtilmiştir.

KarakterDesimal Koduİsimlendirilmiş GirişAçıklama
&#34;&quot;Çift Tırnak İşareti (Quotation mark)
&&#38;&amp;VE İşareti (Ampersand)
&#60;&lt;Küçüktür (Less than)
&#62;&gt;Büyüktür (Greater than)
 &#160;&nbsp;[Kesintisiz] Boşluk (Nonbreaking space)
¡&#161;&iexcl;Ters Ünlem İşareti (Inverted exclamation)
¢&#162;&cent;Sent İşareti (Cent sign)
£&#163;&pound;Sterlin İşareti (Pound sterling)
¤&#164;&curren;? General currency sign
¥&#165;&yen;[Japon] Yen İşareti (Yen sign)
¦&#166;&brvbar; veya &brkbar;Kesintili Dikey Çizgi (Broken vertical bar)
§&#167;&sect;Bölüm/Kısım İşareti (Section sign)
¨&#168;&uml; veya &die;? Diæresis / Umlaut
©&#169;&copy;Telif Hakkı (Copyright)
ª&#170;&ordf;Feminine ordinal
«&#171;&laquo;Sol guillemet (Left angle quote, guillemet left)
¬&#172;&notDeğil İşareti (Not sign)
&#173;&shy;Tire/Eksi İşareti (Soft hyphen)
®&#174;&reg;Marka İşareti (Registered trademark)
¯&#175;&macr; veya &hibar;Macron accent
°&#176;&deg;Derece İşareti (Degree sign)
±&#177;&plusmn;Artı veya Eksi İşareti (Plus or minus)
²&#178;&sup2;Üssü 2 İşareti (Superscript two)
³&#179;&sup3;Üssü 3 İşareti (Superscript three)
´&#180;&acute;Acute accent
µ&#181;&micro;Mikro İşareti (Micro sign)
&#182;&para;Paragraf İşareti (Paragraph sign)
·&#183;&middot;Middle dot
¸&#184;&cedil;Cedilla
¹&#185;&sup1;Üssü 1 İşareti (Superscript one)
º&#186;&ordm;Masculine ordinal
»&#187;&raquo;Sağ Guillemet (Right angle quote, guillemet right)
¼&#188;&frac14;1 Bölü 4 (Fraction one-fourth)
½&#189;&frac12;1 Bölü 2 (Fraction one-half)
¾&#190;&frac34;3 Bölü 4 (Fraction three-fourths)
¿&#191;&iquest;Ters Soru İşareti (Inverted question mark)
À&#192;&Agrave;Capital A, grave accent
Á&#193;&Aacute;Capital A, acute accent
Â&#194;&Acirc;Capital A, circumflex
Ã&#195;&Atilde;Capital A, tilde
Ä&#196;&Auml;Capital A, diæresis / umlaut
Å&#197;&Aring;Capital A, ring
Æ&#198;&AElig;Capital AE ligature
Ç&#199;&Ccedil;Capital C, cedilla
È&#200;&Egrave;Capital E, grave accent
É&#201;&Eacute;Capital E, acute accent
Ê&#202;&Ecirc;Capital E, circumflex
Ë&#203;&Euml;Capital E, diæresis / umlaut
Ì&#204;&Igrave;Capital I, grave accent
Í&#205;&Iacute;Capital I, acute accent
Î&#206;&Icirc;Capital I, circumflex
Ï&#207;&Iuml;Capital I, diæresis / umlaut
Ð&#208;&ETH;Capital Eth, Icelandic
Ñ&#209;&Ntilde;Capital N, tilde
Ò&#210;&Ograve;Capital O, grave accent
Ó&#211;&Oacute;Capital O, acute accent
Ô&#212;&Ocirc;Capital O, circumflex
Õ&#213;&Otilde;Capital O, tilde
Ö&#214;&Ouml;Capital O, diæresis / umlaut
×&#215;&times;Multiply sign
Ø&#216;&Oslash;Capital O, slash
Ù&#217;&Ugrave;Capital U, grave accent
Ú&#218;&Uacute;Capital U, acute accent
Û&#219;&Ucirc;Capital U, circumflex
Ü&#220;&Uuml;Capital U, diæresis / umlaut
Ý&#221;&Yacute;Capital Y, acute accent
Þ&#222;&THORN;Capital Thorn, Icelandic
ß&#223;&szlig;Small sharp s, German sz
à&#224;&agrave;Small a, grave accent
á&#225;&aacute;Small a, acute accent
â&#226;&acirc;Small a, circumflex
ã&#227;&atilde;Small a, tilde
ä&#228;&auml;Small a, diæresis / umlaut
å&#229;&aring;Small a, ring
æ&#230;&aelig;Small ae ligature
ç&#231;&ccedil;Small c, cedilla
è&#232;&egrave;Small e, grave accent
é&#233;&eacute;Small e, acute accent
ê&#234;&ecirc;Small e, circumflex
ë&#235;&euml;Small e, diæresis / umlaut
ì&#236;&igrave;Small i, grave accent
í&#237;&iacute;Small i, acute accent
î&#238;&icirc;Small i, circumflex
ï&#239;&iuml;Small i, diæresis / umlaut
ð&#240;&eth;Small eth, Icelandic
ñ&#241;&ntilde;Small n, tilde
ò&#242;&ograve;Small o, grave accent
ó&#243;&oacute;Small o, acute accent
ô&#244;&ocirc;Small o, circumflex
õ&#245;&otilde;Small o, tilde
ö&#246;&ouml;Small o, diæresis / umlaut
÷&#247;&divide;Bölü İşareti (Division sign)
ø&#248;&oslash;Small o, slash
ù&#249;&ugrave;Small u, grave accent
ú&#250;&uacute;Small u, acute accent
û&#251;&ucirc;Small u, circumflex
ü&#252;&uuml;Small u, diæresis / umlaut
ý&#253;&yacute;Small y, acute accent
þ&#254;&thorn;Small thorn, Icelandic
ÿ&#255;&yuml;Small y, diæresis / umlaut
Php Verot.net Multi Upload

Verot.net sınıfı ile php + html ile multi dosya yükleme scripti

Html Form Kodu

	<form action="?P=TGonder" id="Form1"  method="POST"  enctype="multipart/form-data">
							<table data-role="table" id="table-column-toggle" class="ui-table table-stripe" data-mode="toggle" style="margin:0px;padding:0px;">
								<tbody>
									
									<tr >
										<td ><strong>Dosyaları Seçin</strong></td>
										<td  colspan="2"><input type="file"  id="resim[]"  name="resim[]" multiple /></td>	
									</tr>								
								</tbody>
							</table>

							<input type="submit" value="Talebi Gönder" name="btn_kaydet" data-icon="check" data-theme="a" data-rel="external" data-ajax="false">
						</form> 

Php Kodu

if(isset($_POST['btn_kaydet'])) 
{
	require 'class.upload.php'; // Verot Upload Dosyası
	$resimler = array();
	foreach ($_FILES['resim'] as $k => $a) 
	{
		foreach ($a as $i => $v) 
		{
			if (!array_key_exists($i, $resimler))
			$resimler[$i] = array();
			$resimler[$i][$k] = $v;
	   }
	}
	foreach ($resimler as $resim) 
	{
		$handle = new Upload($resim);
		if ($handle->uploaded) 
		{
			if ($handle->processed) 
			{
				$handle->file_new_name_body = rand(0,99999999999999); // rastgele isim veriyiliyor
				$Yil = date('Y');
				$Gun = date('d');
		    	$Aylar = array('Ocak','Şubat','Mart','Nisan','Mayıs','Haziran','Temmuz','Ağustos','Eylül','Ekim','Kasım','Aralık'); // Yil - Gün ve Ay bazlı klasörleme işlemi yapılıyor
			    $Ay = $Aylar[date('m') - 1];
			    $yol = 'uploads/'.$Yil.'/'.seo_url($Ay).'/'.$Gun.'/'.$PID.'/';
		        $handle->Process($yol ); 
                echo $handle->file_dst_name ; // yüklenen dosyanın ismi
			}
		}
	}

Yüklenen dosya ile detaylı işlemler için https://www.verot.net/php_class_upload_samples.htm sitesini inceleyebilirsiniz

SQL Server Kontröllü Procedure Oluşturma

SQL server procedure oluşturma işlemini kontrol ederek gerçekleştirir var sa procedure update eder yok o ise create işlemini gerçekleştiri

IF NOT EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND OBJECT_ID = OBJECT_ID('dbo.DenetimBitir'))
BEGIN
    EXEC sp_executesql N' 
CREATE PROCEDURE  [dbo].[DenetimBitir](@DRef int )
AS
BEGIN
	IF @DRef IS NOT NULL
	BEGIN
		IF ((select count(*) from MGZDENETIM where DENETREF = @DRef) > 0 )  
		BEGIN
	
			update MGZDENETIM SET BITTAR = GETDATE() , BITSAAT = CONVERT(VARCHAR(5),GETDATE(),108)  where DENETREF = @DRef
		
		END 
	END  
END
'
END 
ELSE
BEGIN
      EXEC sp_executesql N'  
ALTER PROCEDURE [dbo].[DenetimBitir](@DRef int )
AS
BEGIN
	IF @DRef IS NOT NULL
	BEGIN
		IF ((select count(*) from MGZDENETIM where DENETREF = @DRef) > 0 )  
		BEGIN
	
			update MGZDENETIM SET BITTAR = GETDATE() , BITSAAT = CONVERT(VARCHAR(5),GETDATE(),108)  where DENETREF = @DRef
		
		END 
	END  
END
'
END


bu procedure ler diğer yazılımlarda kullanırken işlemlerinizi daha hızlı yapmanızı sağlar

Kullanımı ise aşağıdaki gibidir

DECLARE @RC int
DECLARE @DRef int

EXECUTE @RC = [dbo].[DenetimBitir] 
   @DRef
GO

SQL Server Menagment Studio da ise aşağıdaki resimdeki alanda yer alır

SQL Server Kontröllü Triger Oluşturma

Sql server da bir triger var mı diye kontrol edip var ise update yok sa create işlemini gerçekleştiren script

 IF NOT EXISTS(select * FROM sys.triggers where name = 'trg_HarSil')
BEGIN
    EXEC sp_executesql N' 
CREATE TRIGGER [dbo].[trg_HarSil] ON [dbo].[STOKHAREKET] FOR DELETE AS  
BEGIN SET NOCOUNT ON;
	DECLARE @TRGID INT
    SELECT @TRGID = deleted.ID FROM deleted
    delete from STOKHAREKET WHERE TRGID = @TRGID

END
'
END 
ELSE
BEGIN
      EXEC sp_executesql N'  
ALTER TRIGGER [dbo].[trg_HarSil] ON [dbo].[STOKHAREKET] FOR DELETE AS  
BEGIN SET NOCOUNT ON;
	DECLARE @TRGID INT
    SELECT @TRGID = deleted.ID FROM deleted
    delete from STOKHAREKET WHERE TRGID = @TRGID

END
'
END

yukarıdaki triger da STOKHAREKET tablosuna başka bir trigger ile kayıt edilen veriler bağlı hareket silindiğinde otomatik olarak trigger oluşmuş hareketleri temizler

SQL SERVER Alan İsmini Değiştirme

Sql server bir tablo da yer alan field ın ismini aşağıdaki script ile değiştirebiliriz

 IF EXISTS (SELECT 1 FROM sys.columns WHERE name = 'TABLOADI' AND OBJECT_NAME(object_id) = 'ALANADI')  
 BEGIN 
	EXEC  SP_RENAME '[TABLOADI].[ALANADI]','YENIALANADI'
END

yukarıdaki if exists bölümünde tablo da mevcut alan varmı diye kontrol edilmektedir